diff --git a/config/overlays.mk b/config/overlays.mk index d8876801f..3697dce16 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -43,7 +43,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_8013FFD8.o,tail3.data.o,ov_SC01_005_after.o,tail4.data.o,ov_SC01_005_jr_8015AE2C.o,tail5.data.o,ov_SC01_005_jr_8016AB6C.o,tail6.data.o,ov_SC01_005_jr_801734BC.o,tail7.data.o,ov_SC01_005_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_005_jr_8015444C.o,tail4.data.o,ov_SC01_005_jr_8015A3C8.o,tail5.data.o,ov_SC01_005_jr_8015AE2C.o,tail6.data.o,ov_SC01_005_jr_8016AB6C.o,tail7.data.o,ov_SC01_005_jr_801734BC.o,tail8.data.o,ov_SC01_005_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_005_CHECK_SHA := config/check.ov_SC01_005.sha ov_SC01_005_SYMBOLS := config/symbols.ov_SC01_005.txt ov_SC01_005_SIG := .run/sig.ov_SC01_005.jsonl @@ -65,7 +65,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_8013FFD8.o,tail3.data.o,ov_SC01_006_after.o,tail4.data.o,ov_SC01_006_jr_8015AE2C.o,tail5.data.o,ov_SC01_006_jr_8016AB6C.o,tail6.data.o,ov_SC01_006_jr_801734BC.o,tail7.data.o,ov_SC01_006_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_006_jr_8015444C.o,tail4.data.o,ov_SC01_006_jr_8015A3C8.o,tail5.data.o,ov_SC01_006_jr_8015AE2C.o,tail6.data.o,ov_SC01_006_jr_8016AB6C.o,tail7.data.o,ov_SC01_006_jr_801734BC.o,tail8.data.o,ov_SC01_006_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_006_CHECK_SHA := config/check.ov_SC01_006.sha ov_SC01_006_SYMBOLS := config/symbols.ov_SC01_006.txt ov_SC01_006_SIG := .run/sig.ov_SC01_006.jsonl @@ -87,7 +87,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_8013FFD8.o,tail3.data.o,ov_SC03_001_after.o,tail4.data.o,ov_SC03_001_jr_8015AE2C.o,tail5.data.o,ov_SC03_001_jr_8016AB6C.o,tail6.data.o,ov_SC03_001_jr_801734BC.o,tail7.data.o,ov_SC03_001_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_001_jr_8015444C.o,tail4.data.o,ov_SC03_001_jr_8015A3C8.o,tail5.data.o,ov_SC03_001_jr_8015AE2C.o,tail6.data.o,ov_SC03_001_jr_8016AB6C.o,tail7.data.o,ov_SC03_001_jr_801734BC.o,tail8.data.o,ov_SC03_001_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_001_CHECK_SHA := config/check.ov_SC03_001.sha ov_SC03_001_SYMBOLS := config/symbols.ov_SC03_001.txt ov_SC03_001_SIG := .run/sig.ov_SC03_001.jsonl @@ -109,7 +109,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_8013FFD8.o,tail3.data.o,ov_SC01_000_after.o,tail4.data.o,ov_SC01_000_jr_8015AE2C.o,tail5.data.o,ov_SC01_000_jr_8016AB6C.o,tail6.data.o,ov_SC01_000_jr_801734BC.o,tail7.data.o,ov_SC01_000_jr_80178D40.o,tail8.data.o,ov_SC01_000_jr_8017BEBC.o,tail9.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_8013FFD8.o,tail3.data.o,ov_SC01_000_jr_8015444C.o,tail4.data.o,ov_SC01_000_jr_8015A3C8.o,tail5.data.o,ov_SC01_000_jr_8015AE2C.o,tail6.data.o,ov_SC01_000_jr_8016AB6C.o,tail7.data.o,ov_SC01_000_jr_801734BC.o,tail8.data.o,ov_SC01_000_jr_80178D40.o,tail9.data.o,ov_SC01_000_jr_8017BEBC.o,tail10.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_000_CHECK_SHA := config/check.ov_SC01_000.sha ov_SC01_000_SYMBOLS := config/symbols.ov_SC01_000.txt ov_SC01_000_SIG := .run/sig.ov_SC01_000.jsonl @@ -131,7 +131,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_8013FFD8.o,tail3.data.o,ov_SC01_001_after.o,tail4.data.o,ov_SC01_001_jr_8015AE2C.o,tail5.data.o,ov_SC01_001_jr_8016AB6C.o,tail6.data.o,ov_SC01_001_jr_801734BC.o,tail7.data.o,ov_SC01_001_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_001_jr_8015444C.o,tail4.data.o,ov_SC01_001_jr_8015A3C8.o,tail5.data.o,ov_SC01_001_jr_8015AE2C.o,tail6.data.o,ov_SC01_001_jr_8016AB6C.o,tail7.data.o,ov_SC01_001_jr_801734BC.o,tail8.data.o,ov_SC01_001_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_001_CHECK_SHA := config/check.ov_SC01_001.sha ov_SC01_001_SYMBOLS := config/symbols.ov_SC01_001.txt ov_SC01_001_SIG := .run/sig.ov_SC01_001.jsonl @@ -153,7 +153,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_8013FFD8.o,tail3.data.o,ov_SC02_000_after.o,tail4.data.o,ov_SC02_000_jr_8015AE2C.o,tail5.data.o,ov_SC02_000_jr_8016AB6C.o,tail6.data.o,ov_SC02_000_jr_801734BC.o,tail7.data.o,ov_SC02_000_jr_80178D40.o,tail8.data.o,ov_SC02_000_jr_8017FCB0.o,tail9.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_8013FFD8.o,tail3.data.o,ov_SC02_000_jr_8015444C.o,tail4.data.o,ov_SC02_000_jr_8015A3C8.o,tail5.data.o,ov_SC02_000_jr_8015AE2C.o,tail6.data.o,ov_SC02_000_jr_8016AB6C.o,tail7.data.o,ov_SC02_000_jr_801734BC.o,tail8.data.o,ov_SC02_000_jr_80178D40.o,tail9.data.o,ov_SC02_000_jr_8017FCB0.o,tail10.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_000_CHECK_SHA := config/check.ov_SC02_000.sha ov_SC02_000_SYMBOLS := config/symbols.ov_SC02_000.txt ov_SC02_000_SIG := .run/sig.ov_SC02_000.jsonl @@ -175,7 +175,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_8013FFD8.o,tail3.data.o,ov_SC02_003_after.o,tail4.data.o,ov_SC02_003_jr_8015AE2C.o,tail5.data.o,ov_SC02_003_jr_8016AB6C.o,tail6.data.o,ov_SC02_003_jr_801734BC.o,tail7.data.o,ov_SC02_003_jr_80178D40.o,tail8.data.o,ov_SC02_003_jr_8017FCB0.o,tail9.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_8013FFD8.o,tail3.data.o,ov_SC02_003_jr_8015444C.o,tail4.data.o,ov_SC02_003_jr_8015A3C8.o,tail5.data.o,ov_SC02_003_jr_8015AE2C.o,tail6.data.o,ov_SC02_003_jr_8016AB6C.o,tail7.data.o,ov_SC02_003_jr_801734BC.o,tail8.data.o,ov_SC02_003_jr_80178D40.o,tail9.data.o,ov_SC02_003_jr_8017FCB0.o,tail10.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_003_CHECK_SHA := config/check.ov_SC02_003.sha ov_SC02_003_SYMBOLS := config/symbols.ov_SC02_003.txt ov_SC02_003_SIG := .run/sig.ov_SC02_003.jsonl @@ -197,7 +197,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_8013FFD8.o,tail3.data.o,ov_SC03_002_after.o,tail4.data.o,ov_SC03_002_jr_8015AE2C.o,tail5.data.o,ov_SC03_002_jr_8016AB6C.o,tail6.data.o,ov_SC03_002_jr_801734BC.o,tail7.data.o,ov_SC03_002_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_002_jr_8015444C.o,tail4.data.o,ov_SC03_002_jr_8015A3C8.o,tail5.data.o,ov_SC03_002_jr_8015AE2C.o,tail6.data.o,ov_SC03_002_jr_8016AB6C.o,tail7.data.o,ov_SC03_002_jr_801734BC.o,tail8.data.o,ov_SC03_002_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_002_CHECK_SHA := config/check.ov_SC03_002.sha ov_SC03_002_SYMBOLS := config/symbols.ov_SC03_002.txt ov_SC03_002_SIG := .run/sig.ov_SC03_002.jsonl @@ -219,7 +219,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_8013FFD8.o,tail3.data.o,ov_SC03_006_after.o,tail4.data.o,ov_SC03_006_jr_8015AE2C.o,tail5.data.o,ov_SC03_006_jr_8016AB6C.o,tail6.data.o,ov_SC03_006_jr_801734BC.o,tail7.data.o,ov_SC03_006_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_006_jr_8015444C.o,tail4.data.o,ov_SC03_006_jr_8015A3C8.o,tail5.data.o,ov_SC03_006_jr_8015AE2C.o,tail6.data.o,ov_SC03_006_jr_8016AB6C.o,tail7.data.o,ov_SC03_006_jr_801734BC.o,tail8.data.o,ov_SC03_006_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_006_CHECK_SHA := config/check.ov_SC03_006.sha ov_SC03_006_SYMBOLS := config/symbols.ov_SC03_006.txt ov_SC03_006_SIG := .run/sig.ov_SC03_006.jsonl @@ -241,7 +241,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_8013FFD8.o,tail3.data.o,ov_SC04_000_after.o,tail4.data.o,ov_SC04_000_jr_8015AE2C.o,tail5.data.o,ov_SC04_000_jr_8016AB6C.o,tail6.data.o,ov_SC04_000_jr_801734BC.o,tail7.data.o,ov_SC04_000_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_000_jr_8015444C.o,tail4.data.o,ov_SC04_000_jr_8015A3C8.o,tail5.data.o,ov_SC04_000_jr_8015AE2C.o,tail6.data.o,ov_SC04_000_jr_8016AB6C.o,tail7.data.o,ov_SC04_000_jr_801734BC.o,tail8.data.o,ov_SC04_000_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_000_CHECK_SHA := config/check.ov_SC04_000.sha ov_SC04_000_SYMBOLS := config/symbols.ov_SC04_000.txt ov_SC04_000_SIG := .run/sig.ov_SC04_000.jsonl @@ -263,7 +263,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_8013FFD8.o,tail3.data.o,ov_SC04_018_after.o,tail4.data.o,ov_SC04_018_jr_8015AE2C.o,tail5.data.o,ov_SC04_018_jr_8016AB6C.o,tail6.data.o,ov_SC04_018_jr_801734BC.o,tail7.data.o,ov_SC04_018_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_018_jr_8015444C.o,tail4.data.o,ov_SC04_018_jr_8015A3C8.o,tail5.data.o,ov_SC04_018_jr_8015AE2C.o,tail6.data.o,ov_SC04_018_jr_8016AB6C.o,tail7.data.o,ov_SC04_018_jr_801734BC.o,tail8.data.o,ov_SC04_018_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_018_CHECK_SHA := config/check.ov_SC04_018.sha ov_SC04_018_SYMBOLS := config/symbols.ov_SC04_018.txt ov_SC04_018_SIG := .run/sig.ov_SC04_018.jsonl @@ -285,7 +285,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_8013FFD8.o,tail3.data.o,ov_SC04_019_after.o,tail4.data.o,ov_SC04_019_jr_8015AE2C.o,tail5.data.o,ov_SC04_019_jr_8016AB6C.o,tail6.data.o,ov_SC04_019_jr_801734BC.o,tail7.data.o,ov_SC04_019_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_019_jr_8015444C.o,tail4.data.o,ov_SC04_019_jr_8015A3C8.o,tail5.data.o,ov_SC04_019_jr_8015AE2C.o,tail6.data.o,ov_SC04_019_jr_8016AB6C.o,tail7.data.o,ov_SC04_019_jr_801734BC.o,tail8.data.o,ov_SC04_019_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_019_CHECK_SHA := config/check.ov_SC04_019.sha ov_SC04_019_SYMBOLS := config/symbols.ov_SC04_019.txt ov_SC04_019_SIG := .run/sig.ov_SC04_019.jsonl @@ -307,7 +307,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_8013FFD8.o,tail3.data.o,ov_SC05_000_after.o,tail4.data.o,ov_SC05_000_jr_8015AE2C.o,tail5.data.o,ov_SC05_000_jr_8016AB6C.o,tail6.data.o,ov_SC05_000_jr_801734BC.o,tail7.data.o,ov_SC05_000_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_000_jr_8015444C.o,tail4.data.o,ov_SC05_000_jr_8015A3C8.o,tail5.data.o,ov_SC05_000_jr_8015AE2C.o,tail6.data.o,ov_SC05_000_jr_8016AB6C.o,tail7.data.o,ov_SC05_000_jr_801734BC.o,tail8.data.o,ov_SC05_000_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_000_CHECK_SHA := config/check.ov_SC05_000.sha ov_SC05_000_SYMBOLS := config/symbols.ov_SC05_000.txt ov_SC05_000_SIG := .run/sig.ov_SC05_000.jsonl @@ -329,7 +329,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.o,tail2.data.o,ov_SC06_000_after.o,tail3.data.o,ov_SC06_000_jr_8015AE2C.o,tail4.data.o,ov_SC06_000_jr_8016AB6C.o,tail5.data.o,ov_SC06_000_jr_801734BC.o,tail6.data.o,ov_SC06_000_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_000_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_000.o,tail2.data.o,ov_SC06_000_jr_8015444C.o,tail3.data.o,ov_SC06_000_jr_8015A3C8.o,tail4.data.o,ov_SC06_000_jr_8015AE2C.o,tail5.data.o,ov_SC06_000_jr_8016AB6C.o,tail6.data.o,ov_SC06_000_jr_801734BC.o,tail7.data.o,ov_SC06_000_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_000_CHECK_SHA := config/check.ov_SC06_000.sha ov_SC06_000_SYMBOLS := config/symbols.ov_SC06_000.txt ov_SC06_000_SIG := .run/sig.ov_SC06_000.jsonl @@ -351,7 +351,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_8013FFD8.o,tail3.data.o,ov_SC07_000_after.o,tail4.data.o,ov_SC07_000_jr_8015AE2C.o,tail5.data.o,ov_SC07_000_jr_8016AB6C.o,tail6.data.o,ov_SC07_000_jr_801734BC.o,tail7.data.o,ov_SC07_000_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC07_000_jr_8015444C.o,tail4.data.o,ov_SC07_000_jr_8015A3C8.o,tail5.data.o,ov_SC07_000_jr_8015AE2C.o,tail6.data.o,ov_SC07_000_jr_8016AB6C.o,tail7.data.o,ov_SC07_000_jr_801734BC.o,tail8.data.o,ov_SC07_000_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_000_CHECK_SHA := config/check.ov_SC07_000.sha ov_SC07_000_SYMBOLS := config/symbols.ov_SC07_000.txt ov_SC07_000_SIG := .run/sig.ov_SC07_000.jsonl @@ -373,7 +373,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_8013FFD8.o,tail3.data.o,ov_SC01_004_after.o,tail4.data.o,ov_SC01_004_jr_8015AE2C.o,tail5.data.o,ov_SC01_004_jr_8016AB6C.o,tail6.data.o,ov_SC01_004_jr_801734BC.o,tail7.data.o,ov_SC01_004_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_004_jr_8015444C.o,tail4.data.o,ov_SC01_004_jr_8015A3C8.o,tail5.data.o,ov_SC01_004_jr_8015AE2C.o,tail6.data.o,ov_SC01_004_jr_8016AB6C.o,tail7.data.o,ov_SC01_004_jr_801734BC.o,tail8.data.o,ov_SC01_004_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_004_CHECK_SHA := config/check.ov_SC01_004.sha ov_SC01_004_SYMBOLS := config/symbols.ov_SC01_004.txt ov_SC01_004_SIG := .run/sig.ov_SC01_004.jsonl @@ -395,7 +395,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_8013FFD8.o,tail3.data.o,ov_SC01_008_after.o,tail4.data.o,ov_SC01_008_jr_8015AE2C.o,tail5.data.o,ov_SC01_008_jr_8016AB6C.o,tail6.data.o,ov_SC01_008_jr_801734BC.o,tail7.data.o,ov_SC01_008_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_008_jr_8015444C.o,tail4.data.o,ov_SC01_008_jr_8015A3C8.o,tail5.data.o,ov_SC01_008_jr_8015AE2C.o,tail6.data.o,ov_SC01_008_jr_8016AB6C.o,tail7.data.o,ov_SC01_008_jr_801734BC.o,tail8.data.o,ov_SC01_008_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_008_CHECK_SHA := config/check.ov_SC01_008.sha ov_SC01_008_SYMBOLS := config/symbols.ov_SC01_008.txt ov_SC01_008_SIG := .run/sig.ov_SC01_008.jsonl @@ -417,7 +417,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_8013FFD8.o,tail3.data.o,ov_SC01_009_after.o,tail4.data.o,ov_SC01_009_jr_8015AE2C.o,tail5.data.o,ov_SC01_009_jr_8016AB6C.o,tail6.data.o,ov_SC01_009_jr_801734BC.o,tail7.data.o,ov_SC01_009_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_009_jr_8015444C.o,tail4.data.o,ov_SC01_009_jr_8015A3C8.o,tail5.data.o,ov_SC01_009_jr_8015AE2C.o,tail6.data.o,ov_SC01_009_jr_8016AB6C.o,tail7.data.o,ov_SC01_009_jr_801734BC.o,tail8.data.o,ov_SC01_009_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_009_CHECK_SHA := config/check.ov_SC01_009.sha ov_SC01_009_SYMBOLS := config/symbols.ov_SC01_009.txt ov_SC01_009_SIG := .run/sig.ov_SC01_009.jsonl @@ -439,7 +439,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_8013FFD8.o,tail3.data.o,ov_SC01_074_after.o,tail4.data.o,ov_SC01_074_jr_8015AE2C.o,tail5.data.o,ov_SC01_074_jr_8016AB6C.o,tail6.data.o,ov_SC01_074_jr_801734BC.o,tail7.data.o,ov_SC01_074_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_074_jr_8015444C.o,tail4.data.o,ov_SC01_074_jr_8015A3C8.o,tail5.data.o,ov_SC01_074_jr_8015AE2C.o,tail6.data.o,ov_SC01_074_jr_8016AB6C.o,tail7.data.o,ov_SC01_074_jr_801734BC.o,tail8.data.o,ov_SC01_074_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_074_CHECK_SHA := config/check.ov_SC01_074.sha ov_SC01_074_SYMBOLS := config/symbols.ov_SC01_074.txt ov_SC01_074_SIG := .run/sig.ov_SC01_074.jsonl @@ -461,7 +461,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_8013FFD8.o,tail3.data.o,ov_SC01_080_after.o,tail4.data.o,ov_SC01_080_jr_8015AE2C.o,tail5.data.o,ov_SC01_080_jr_8016AB6C.o,tail6.data.o,ov_SC01_080_jr_801734BC.o,tail7.data.o,ov_SC01_080_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_080_jr_8015444C.o,tail4.data.o,ov_SC01_080_jr_8015A3C8.o,tail5.data.o,ov_SC01_080_jr_8015AE2C.o,tail6.data.o,ov_SC01_080_jr_8016AB6C.o,tail7.data.o,ov_SC01_080_jr_801734BC.o,tail8.data.o,ov_SC01_080_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_080_CHECK_SHA := config/check.ov_SC01_080.sha ov_SC01_080_SYMBOLS := config/symbols.ov_SC01_080.txt ov_SC01_080_SIG := .run/sig.ov_SC01_080.jsonl @@ -483,7 +483,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_8013FFD8.o,tail3.data.o,ov_SC01_084_after.o,tail4.data.o,ov_SC01_084_jr_8015AE2C.o,tail5.data.o,ov_SC01_084_jr_8016AB6C.o,tail6.data.o,ov_SC01_084_jr_801734BC.o,tail7.data.o,ov_SC01_084_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC01_084_jr_8015444C.o,tail4.data.o,ov_SC01_084_jr_8015A3C8.o,tail5.data.o,ov_SC01_084_jr_8015AE2C.o,tail6.data.o,ov_SC01_084_jr_8016AB6C.o,tail7.data.o,ov_SC01_084_jr_801734BC.o,tail8.data.o,ov_SC01_084_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC01_084_CHECK_SHA := config/check.ov_SC01_084.sha ov_SC01_084_SYMBOLS := config/symbols.ov_SC01_084.txt ov_SC01_084_SIG := .run/sig.ov_SC01_084.jsonl @@ -505,7 +505,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_8013FFD8.o,tail3.data.o,ov_SC02_004_after.o,tail4.data.o,ov_SC02_004_jr_8015AE2C.o,tail5.data.o,ov_SC02_004_jr_8016AB6C.o,tail6.data.o,ov_SC02_004_jr_801734BC.o,tail7.data.o,ov_SC02_004_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_004_jr_8015444C.o,tail4.data.o,ov_SC02_004_jr_8015A3C8.o,tail5.data.o,ov_SC02_004_jr_8015AE2C.o,tail6.data.o,ov_SC02_004_jr_8016AB6C.o,tail7.data.o,ov_SC02_004_jr_801734BC.o,tail8.data.o,ov_SC02_004_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_004_CHECK_SHA := config/check.ov_SC02_004.sha ov_SC02_004_SYMBOLS := config/symbols.ov_SC02_004.txt ov_SC02_004_SIG := .run/sig.ov_SC02_004.jsonl @@ -527,7 +527,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_8013FFD8.o,tail3.data.o,ov_SC02_005_after.o,tail4.data.o,ov_SC02_005_jr_8015AE2C.o,tail5.data.o,ov_SC02_005_jr_8016AB6C.o,tail6.data.o,ov_SC02_005_jr_801734BC.o,tail7.data.o,ov_SC02_005_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_005_jr_8015444C.o,tail4.data.o,ov_SC02_005_jr_8015A3C8.o,tail5.data.o,ov_SC02_005_jr_8015AE2C.o,tail6.data.o,ov_SC02_005_jr_8016AB6C.o,tail7.data.o,ov_SC02_005_jr_801734BC.o,tail8.data.o,ov_SC02_005_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_005_CHECK_SHA := config/check.ov_SC02_005.sha ov_SC02_005_SYMBOLS := config/symbols.ov_SC02_005.txt ov_SC02_005_SIG := .run/sig.ov_SC02_005.jsonl @@ -549,7 +549,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_8013FFD8.o,tail3.data.o,ov_SC02_011_after.o,tail4.data.o,ov_SC02_011_jr_8015AE2C.o,tail5.data.o,ov_SC02_011_jr_8016AB6C.o,tail6.data.o,ov_SC02_011_jr_801734BC.o,tail7.data.o,ov_SC02_011_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_011_jr_8015444C.o,tail4.data.o,ov_SC02_011_jr_8015A3C8.o,tail5.data.o,ov_SC02_011_jr_8015AE2C.o,tail6.data.o,ov_SC02_011_jr_8016AB6C.o,tail7.data.o,ov_SC02_011_jr_801734BC.o,tail8.data.o,ov_SC02_011_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_011_CHECK_SHA := config/check.ov_SC02_011.sha ov_SC02_011_SYMBOLS := config/symbols.ov_SC02_011.txt ov_SC02_011_SIG := .run/sig.ov_SC02_011.jsonl @@ -571,7 +571,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_8013FFD8.o,tail3.data.o,ov_SC02_015_after.o,tail4.data.o,ov_SC02_015_jr_8015AE2C.o,tail5.data.o,ov_SC02_015_jr_8016AB6C.o,tail6.data.o,ov_SC02_015_jr_801734BC.o,tail7.data.o,ov_SC02_015_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_015_jr_8015444C.o,tail4.data.o,ov_SC02_015_jr_8015A3C8.o,tail5.data.o,ov_SC02_015_jr_8015AE2C.o,tail6.data.o,ov_SC02_015_jr_8016AB6C.o,tail7.data.o,ov_SC02_015_jr_801734BC.o,tail8.data.o,ov_SC02_015_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_015_CHECK_SHA := config/check.ov_SC02_015.sha ov_SC02_015_SYMBOLS := config/symbols.ov_SC02_015.txt ov_SC02_015_SIG := .run/sig.ov_SC02_015.jsonl @@ -593,7 +593,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_8013FFD8.o,tail3.data.o,ov_SC02_016_after.o,tail4.data.o,ov_SC02_016_jr_8015AE2C.o,tail5.data.o,ov_SC02_016_jr_8016AB6C.o,tail6.data.o,ov_SC02_016_jr_801734BC.o,tail7.data.o,ov_SC02_016_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_016_jr_8015444C.o,tail4.data.o,ov_SC02_016_jr_8015A3C8.o,tail5.data.o,ov_SC02_016_jr_8015AE2C.o,tail6.data.o,ov_SC02_016_jr_8016AB6C.o,tail7.data.o,ov_SC02_016_jr_801734BC.o,tail8.data.o,ov_SC02_016_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_016_CHECK_SHA := config/check.ov_SC02_016.sha ov_SC02_016_SYMBOLS := config/symbols.ov_SC02_016.txt ov_SC02_016_SIG := .run/sig.ov_SC02_016.jsonl @@ -615,7 +615,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_8013FFD8.o,tail3.data.o,ov_SC02_017_after.o,tail4.data.o,ov_SC02_017_jr_8015AE2C.o,tail5.data.o,ov_SC02_017_jr_8016AB6C.o,tail6.data.o,ov_SC02_017_jr_801734BC.o,tail7.data.o,ov_SC02_017_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_017_jr_8015444C.o,tail4.data.o,ov_SC02_017_jr_8015A3C8.o,tail5.data.o,ov_SC02_017_jr_8015AE2C.o,tail6.data.o,ov_SC02_017_jr_8016AB6C.o,tail7.data.o,ov_SC02_017_jr_801734BC.o,tail8.data.o,ov_SC02_017_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_017_CHECK_SHA := config/check.ov_SC02_017.sha ov_SC02_017_SYMBOLS := config/symbols.ov_SC02_017.txt ov_SC02_017_SIG := .run/sig.ov_SC02_017.jsonl @@ -637,7 +637,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_8013FFD8.o,tail3.data.o,ov_SC02_021_after.o,tail4.data.o,ov_SC02_021_jr_8015AE2C.o,tail5.data.o,ov_SC02_021_jr_8016AB6C.o,tail6.data.o,ov_SC02_021_jr_801734BC.o,tail7.data.o,ov_SC02_021_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_021_jr_8015444C.o,tail4.data.o,ov_SC02_021_jr_8015A3C8.o,tail5.data.o,ov_SC02_021_jr_8015AE2C.o,tail6.data.o,ov_SC02_021_jr_8016AB6C.o,tail7.data.o,ov_SC02_021_jr_801734BC.o,tail8.data.o,ov_SC02_021_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_021_CHECK_SHA := config/check.ov_SC02_021.sha ov_SC02_021_SYMBOLS := config/symbols.ov_SC02_021.txt ov_SC02_021_SIG := .run/sig.ov_SC02_021.jsonl @@ -659,7 +659,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_8013FFD8.o,tail3.data.o,ov_SC02_026_after.o,tail4.data.o,ov_SC02_026_jr_8015AE2C.o,tail5.data.o,ov_SC02_026_jr_8016AB6C.o,tail6.data.o,ov_SC02_026_jr_801734BC.o,tail7.data.o,ov_SC02_026_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_026_jr_8015444C.o,tail4.data.o,ov_SC02_026_jr_8015A3C8.o,tail5.data.o,ov_SC02_026_jr_8015AE2C.o,tail6.data.o,ov_SC02_026_jr_8016AB6C.o,tail7.data.o,ov_SC02_026_jr_801734BC.o,tail8.data.o,ov_SC02_026_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_026_CHECK_SHA := config/check.ov_SC02_026.sha ov_SC02_026_SYMBOLS := config/symbols.ov_SC02_026.txt ov_SC02_026_SIG := .run/sig.ov_SC02_026.jsonl @@ -681,7 +681,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_8013FFD8.o,tail3.data.o,ov_SC02_027_after.o,tail4.data.o,ov_SC02_027_jr_8015AE2C.o,tail5.data.o,ov_SC02_027_jr_8016AB6C.o,tail6.data.o,ov_SC02_027_jr_801734BC.o,tail7.data.o,ov_SC02_027_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_027_jr_8015444C.o,tail4.data.o,ov_SC02_027_jr_8015A3C8.o,tail5.data.o,ov_SC02_027_jr_8015AE2C.o,tail6.data.o,ov_SC02_027_jr_8016AB6C.o,tail7.data.o,ov_SC02_027_jr_801734BC.o,tail8.data.o,ov_SC02_027_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_027_CHECK_SHA := config/check.ov_SC02_027.sha ov_SC02_027_SYMBOLS := config/symbols.ov_SC02_027.txt ov_SC02_027_SIG := .run/sig.ov_SC02_027.jsonl @@ -703,7 +703,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_8013FFD8.o,tail3.data.o,ov_SC02_028_after.o,tail4.data.o,ov_SC02_028_jr_8015AE2C.o,tail5.data.o,ov_SC02_028_jr_8016AB6C.o,tail6.data.o,ov_SC02_028_jr_801734BC.o,tail7.data.o,ov_SC02_028_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_028_jr_8015444C.o,tail4.data.o,ov_SC02_028_jr_8015A3C8.o,tail5.data.o,ov_SC02_028_jr_8015AE2C.o,tail6.data.o,ov_SC02_028_jr_8016AB6C.o,tail7.data.o,ov_SC02_028_jr_801734BC.o,tail8.data.o,ov_SC02_028_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_028_CHECK_SHA := config/check.ov_SC02_028.sha ov_SC02_028_SYMBOLS := config/symbols.ov_SC02_028.txt ov_SC02_028_SIG := .run/sig.ov_SC02_028.jsonl @@ -725,7 +725,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_8013FFD8.o,tail3.data.o,ov_SC02_031_after.o,tail4.data.o,ov_SC02_031_jr_8015AE2C.o,tail5.data.o,ov_SC02_031_jr_8016AB6C.o,tail6.data.o,ov_SC02_031_jr_801734BC.o,tail7.data.o,ov_SC02_031_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_031_jr_8015444C.o,tail4.data.o,ov_SC02_031_jr_8015A3C8.o,tail5.data.o,ov_SC02_031_jr_8015AE2C.o,tail6.data.o,ov_SC02_031_jr_8016AB6C.o,tail7.data.o,ov_SC02_031_jr_801734BC.o,tail8.data.o,ov_SC02_031_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_031_CHECK_SHA := config/check.ov_SC02_031.sha ov_SC02_031_SYMBOLS := config/symbols.ov_SC02_031.txt ov_SC02_031_SIG := .run/sig.ov_SC02_031.jsonl @@ -747,7 +747,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_8013FFD8.o,tail3.data.o,ov_SC02_035_after.o,tail4.data.o,ov_SC02_035_jr_8015AE2C.o,tail5.data.o,ov_SC02_035_jr_8016AB6C.o,tail6.data.o,ov_SC02_035_jr_801734BC.o,tail7.data.o,ov_SC02_035_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_035_jr_8015444C.o,tail4.data.o,ov_SC02_035_jr_8015A3C8.o,tail5.data.o,ov_SC02_035_jr_8015AE2C.o,tail6.data.o,ov_SC02_035_jr_8016AB6C.o,tail7.data.o,ov_SC02_035_jr_801734BC.o,tail8.data.o,ov_SC02_035_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_035_CHECK_SHA := config/check.ov_SC02_035.sha ov_SC02_035_SYMBOLS := config/symbols.ov_SC02_035.txt ov_SC02_035_SIG := .run/sig.ov_SC02_035.jsonl @@ -769,7 +769,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_8013FFD8.o,tail3.data.o,ov_SC02_039_after.o,tail4.data.o,ov_SC02_039_jr_8015AE2C.o,tail5.data.o,ov_SC02_039_jr_8016AB6C.o,tail6.data.o,ov_SC02_039_jr_801734BC.o,tail7.data.o,ov_SC02_039_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_039_jr_8015444C.o,tail4.data.o,ov_SC02_039_jr_8015A3C8.o,tail5.data.o,ov_SC02_039_jr_8015AE2C.o,tail6.data.o,ov_SC02_039_jr_8016AB6C.o,tail7.data.o,ov_SC02_039_jr_801734BC.o,tail8.data.o,ov_SC02_039_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_039_CHECK_SHA := config/check.ov_SC02_039.sha ov_SC02_039_SYMBOLS := config/symbols.ov_SC02_039.txt ov_SC02_039_SIG := .run/sig.ov_SC02_039.jsonl @@ -791,7 +791,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_8013FFD8.o,tail3.data.o,ov_SC02_041_after.o,tail4.data.o,ov_SC02_041_jr_8015AE2C.o,tail5.data.o,ov_SC02_041_jr_8016AB6C.o,tail6.data.o,ov_SC02_041_jr_801734BC.o,tail7.data.o,ov_SC02_041_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC02_041_jr_8015444C.o,tail4.data.o,ov_SC02_041_jr_8015A3C8.o,tail5.data.o,ov_SC02_041_jr_8015AE2C.o,tail6.data.o,ov_SC02_041_jr_8016AB6C.o,tail7.data.o,ov_SC02_041_jr_801734BC.o,tail8.data.o,ov_SC02_041_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC02_041_CHECK_SHA := config/check.ov_SC02_041.sha ov_SC02_041_SYMBOLS := config/symbols.ov_SC02_041.txt ov_SC02_041_SIG := .run/sig.ov_SC02_041.jsonl @@ -813,7 +813,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_8013FFD8.o,tail3.data.o,ov_SC03_003_after.o,tail4.data.o,ov_SC03_003_jr_8015AE2C.o,tail5.data.o,ov_SC03_003_jr_8016AB6C.o,tail6.data.o,ov_SC03_003_jr_801734BC.o,tail7.data.o,ov_SC03_003_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_003_jr_8015444C.o,tail4.data.o,ov_SC03_003_jr_8015A3C8.o,tail5.data.o,ov_SC03_003_jr_8015AE2C.o,tail6.data.o,ov_SC03_003_jr_8016AB6C.o,tail7.data.o,ov_SC03_003_jr_801734BC.o,tail8.data.o,ov_SC03_003_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_003_CHECK_SHA := config/check.ov_SC03_003.sha ov_SC03_003_SYMBOLS := config/symbols.ov_SC03_003.txt ov_SC03_003_SIG := .run/sig.ov_SC03_003.jsonl @@ -835,7 +835,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_8013FFD8.o,tail3.data.o,ov_SC03_007_after.o,tail4.data.o,ov_SC03_007_jr_8015AE2C.o,tail5.data.o,ov_SC03_007_jr_8016AB6C.o,tail6.data.o,ov_SC03_007_jr_801734BC.o,tail7.data.o,ov_SC03_007_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_007_jr_8015444C.o,tail4.data.o,ov_SC03_007_jr_8015A3C8.o,tail5.data.o,ov_SC03_007_jr_8015AE2C.o,tail6.data.o,ov_SC03_007_jr_8016AB6C.o,tail7.data.o,ov_SC03_007_jr_801734BC.o,tail8.data.o,ov_SC03_007_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_007_CHECK_SHA := config/check.ov_SC03_007.sha ov_SC03_007_SYMBOLS := config/symbols.ov_SC03_007.txt ov_SC03_007_SIG := .run/sig.ov_SC03_007.jsonl @@ -857,7 +857,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_8013FFD8.o,tail3.data.o,ov_SC03_010_after.o,tail4.data.o,ov_SC03_010_jr_8015AE2C.o,tail5.data.o,ov_SC03_010_jr_8016AB6C.o,tail6.data.o,ov_SC03_010_jr_801734BC.o,tail7.data.o,ov_SC03_010_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_010_jr_8015444C.o,tail4.data.o,ov_SC03_010_jr_8015A3C8.o,tail5.data.o,ov_SC03_010_jr_8015AE2C.o,tail6.data.o,ov_SC03_010_jr_8016AB6C.o,tail7.data.o,ov_SC03_010_jr_801734BC.o,tail8.data.o,ov_SC03_010_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_010_CHECK_SHA := config/check.ov_SC03_010.sha ov_SC03_010_SYMBOLS := config/symbols.ov_SC03_010.txt ov_SC03_010_SIG := .run/sig.ov_SC03_010.jsonl @@ -879,7 +879,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.o,tail2.data.o,ov_SC03_011_after.o,tail3.data.o,ov_SC03_011_jr_8015AE2C.o,tail4.data.o,ov_SC03_011_jr_8016AB6C.o,tail5.data.o,ov_SC03_011_jr_801734BC.o,tail6.data.o,ov_SC03_011_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_011_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_011.o,tail2.data.o,ov_SC03_011_jr_8015444C.o,tail3.data.o,ov_SC03_011_jr_8015A3C8.o,tail4.data.o,ov_SC03_011_jr_8015AE2C.o,tail5.data.o,ov_SC03_011_jr_8016AB6C.o,tail6.data.o,ov_SC03_011_jr_801734BC.o,tail7.data.o,ov_SC03_011_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_011_CHECK_SHA := config/check.ov_SC03_011.sha ov_SC03_011_SYMBOLS := config/symbols.ov_SC03_011.txt ov_SC03_011_SIG := .run/sig.ov_SC03_011.jsonl @@ -901,7 +901,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_8013FFD8.o,tail3.data.o,ov_SC03_012_after.o,tail4.data.o,ov_SC03_012_jr_8015AE2C.o,tail5.data.o,ov_SC03_012_jr_8016AB6C.o,tail6.data.o,ov_SC03_012_jr_801734BC.o,tail7.data.o,ov_SC03_012_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_012_jr_8015444C.o,tail4.data.o,ov_SC03_012_jr_8015A3C8.o,tail5.data.o,ov_SC03_012_jr_8015AE2C.o,tail6.data.o,ov_SC03_012_jr_8016AB6C.o,tail7.data.o,ov_SC03_012_jr_801734BC.o,tail8.data.o,ov_SC03_012_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_012_CHECK_SHA := config/check.ov_SC03_012.sha ov_SC03_012_SYMBOLS := config/symbols.ov_SC03_012.txt ov_SC03_012_SIG := .run/sig.ov_SC03_012.jsonl @@ -923,7 +923,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_8013FFD8.o,tail3.data.o,ov_SC03_013_after.o,tail4.data.o,ov_SC03_013_jr_8015AE2C.o,tail5.data.o,ov_SC03_013_jr_8016AB6C.o,tail6.data.o,ov_SC03_013_jr_801734BC.o,tail7.data.o,ov_SC03_013_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_013_jr_8015444C.o,tail4.data.o,ov_SC03_013_jr_8015A3C8.o,tail5.data.o,ov_SC03_013_jr_8015AE2C.o,tail6.data.o,ov_SC03_013_jr_8016AB6C.o,tail7.data.o,ov_SC03_013_jr_801734BC.o,tail8.data.o,ov_SC03_013_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_013_CHECK_SHA := config/check.ov_SC03_013.sha ov_SC03_013_SYMBOLS := config/symbols.ov_SC03_013.txt ov_SC03_013_SIG := .run/sig.ov_SC03_013.jsonl @@ -945,7 +945,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_8013FFD8.o,tail3.data.o,ov_SC03_014_after.o,tail4.data.o,ov_SC03_014_jr_8015AE2C.o,tail5.data.o,ov_SC03_014_jr_8016AB6C.o,tail6.data.o,ov_SC03_014_jr_801734BC.o,tail7.data.o,ov_SC03_014_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_014_jr_8015444C.o,tail4.data.o,ov_SC03_014_jr_8015A3C8.o,tail5.data.o,ov_SC03_014_jr_8015AE2C.o,tail6.data.o,ov_SC03_014_jr_8016AB6C.o,tail7.data.o,ov_SC03_014_jr_801734BC.o,tail8.data.o,ov_SC03_014_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_014_CHECK_SHA := config/check.ov_SC03_014.sha ov_SC03_014_SYMBOLS := config/symbols.ov_SC03_014.txt ov_SC03_014_SIG := .run/sig.ov_SC03_014.jsonl @@ -967,7 +967,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_8013FFD8.o,tail3.data.o,ov_SC03_015_after.o,tail4.data.o,ov_SC03_015_jr_8015AE2C.o,tail5.data.o,ov_SC03_015_jr_8016AB6C.o,tail6.data.o,ov_SC03_015_jr_801734BC.o,tail7.data.o,ov_SC03_015_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_015_jr_8015444C.o,tail4.data.o,ov_SC03_015_jr_8015A3C8.o,tail5.data.o,ov_SC03_015_jr_8015AE2C.o,tail6.data.o,ov_SC03_015_jr_8016AB6C.o,tail7.data.o,ov_SC03_015_jr_801734BC.o,tail8.data.o,ov_SC03_015_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_015_CHECK_SHA := config/check.ov_SC03_015.sha ov_SC03_015_SYMBOLS := config/symbols.ov_SC03_015.txt ov_SC03_015_SIG := .run/sig.ov_SC03_015.jsonl @@ -989,7 +989,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_8013FFD8.o,tail3.data.o,ov_SC03_023_after.o,tail4.data.o,ov_SC03_023_jr_8015AE2C.o,tail5.data.o,ov_SC03_023_jr_8016AB6C.o,tail6.data.o,ov_SC03_023_jr_801734BC.o,tail7.data.o,ov_SC03_023_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_023_jr_8015444C.o,tail4.data.o,ov_SC03_023_jr_8015A3C8.o,tail5.data.o,ov_SC03_023_jr_8015AE2C.o,tail6.data.o,ov_SC03_023_jr_8016AB6C.o,tail7.data.o,ov_SC03_023_jr_801734BC.o,tail8.data.o,ov_SC03_023_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_023_CHECK_SHA := config/check.ov_SC03_023.sha ov_SC03_023_SYMBOLS := config/symbols.ov_SC03_023.txt ov_SC03_023_SIG := .run/sig.ov_SC03_023.jsonl @@ -1011,7 +1011,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_8013FFD8.o,tail3.data.o,ov_SC03_024_after.o,tail4.data.o,ov_SC03_024_jr_8015AE2C.o,tail5.data.o,ov_SC03_024_jr_8016AB6C.o,tail6.data.o,ov_SC03_024_jr_801734BC.o,tail7.data.o,ov_SC03_024_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_024_jr_8015444C.o,tail4.data.o,ov_SC03_024_jr_8015A3C8.o,tail5.data.o,ov_SC03_024_jr_8015AE2C.o,tail6.data.o,ov_SC03_024_jr_8016AB6C.o,tail7.data.o,ov_SC03_024_jr_801734BC.o,tail8.data.o,ov_SC03_024_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_024_CHECK_SHA := config/check.ov_SC03_024.sha ov_SC03_024_SYMBOLS := config/symbols.ov_SC03_024.txt ov_SC03_024_SIG := .run/sig.ov_SC03_024.jsonl @@ -1033,7 +1033,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_8013FFD8.o,tail3.data.o,ov_SC03_028_after.o,tail4.data.o,ov_SC03_028_jr_8015AE2C.o,tail5.data.o,ov_SC03_028_jr_8016AB6C.o,tail6.data.o,ov_SC03_028_jr_801734BC.o,tail7.data.o,ov_SC03_028_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_028_jr_8015444C.o,tail4.data.o,ov_SC03_028_jr_8015A3C8.o,tail5.data.o,ov_SC03_028_jr_8015AE2C.o,tail6.data.o,ov_SC03_028_jr_8016AB6C.o,tail7.data.o,ov_SC03_028_jr_801734BC.o,tail8.data.o,ov_SC03_028_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_028_CHECK_SHA := config/check.ov_SC03_028.sha ov_SC03_028_SYMBOLS := config/symbols.ov_SC03_028.txt ov_SC03_028_SIG := .run/sig.ov_SC03_028.jsonl @@ -1055,7 +1055,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_8013FFD8.o,tail3.data.o,ov_SC03_029_after.o,tail4.data.o,ov_SC03_029_jr_8015AE2C.o,tail5.data.o,ov_SC03_029_jr_8016AB6C.o,tail6.data.o,ov_SC03_029_jr_801734BC.o,tail7.data.o,ov_SC03_029_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_029_jr_8015444C.o,tail4.data.o,ov_SC03_029_jr_8015A3C8.o,tail5.data.o,ov_SC03_029_jr_8015AE2C.o,tail6.data.o,ov_SC03_029_jr_8016AB6C.o,tail7.data.o,ov_SC03_029_jr_801734BC.o,tail8.data.o,ov_SC03_029_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_029_CHECK_SHA := config/check.ov_SC03_029.sha ov_SC03_029_SYMBOLS := config/symbols.ov_SC03_029.txt ov_SC03_029_SIG := .run/sig.ov_SC03_029.jsonl @@ -1077,7 +1077,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.o,tail2.data.o,ov_SC03_030_after.o,tail3.data.o,ov_SC03_030_jr_8015AE2C.o,tail4.data.o,ov_SC03_030_jr_8016AB6C.o,tail5.data.o,ov_SC03_030_jr_801734BC.o,tail6.data.o,ov_SC03_030_jr_80178D40.o,tail7.data.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_030_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_030.o,tail2.data.o,ov_SC03_030_jr_8015444C.o,tail3.data.o,ov_SC03_030_jr_8015A3C8.o,tail4.data.o,ov_SC03_030_jr_8015AE2C.o,tail5.data.o,ov_SC03_030_jr_8016AB6C.o,tail6.data.o,ov_SC03_030_jr_801734BC.o,tail7.data.o,ov_SC03_030_jr_80178D40.o,tail8.data.o # Phase-26 §8 jtbl-rodata carve ov_SC03_030_CHECK_SHA := config/check.ov_SC03_030.sha ov_SC03_030_SYMBOLS := config/symbols.ov_SC03_030.txt ov_SC03_030_SIG := .run/sig.ov_SC03_030.jsonl @@ -1099,7 +1099,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_8013FFD8.o,tail3.data.o,ov_SC03_031_after.o,tail4.data.o,ov_SC03_031_jr_8015AE2C.o,tail5.data.o,ov_SC03_031_jr_8016AB6C.o,tail6.data.o,ov_SC03_031_jr_801734BC.o,tail7.data.o,ov_SC03_031_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_031_jr_8015444C.o,tail4.data.o,ov_SC03_031_jr_8015A3C8.o,tail5.data.o,ov_SC03_031_jr_8015AE2C.o,tail6.data.o,ov_SC03_031_jr_8016AB6C.o,tail7.data.o,ov_SC03_031_jr_801734BC.o,tail8.data.o,ov_SC03_031_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_031_CHECK_SHA := config/check.ov_SC03_031.sha ov_SC03_031_SYMBOLS := config/symbols.ov_SC03_031.txt ov_SC03_031_SIG := .run/sig.ov_SC03_031.jsonl @@ -1121,7 +1121,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_8013FFD8.o,tail3.data.o,ov_SC03_089_after.o,tail4.data.o,ov_SC03_089_jr_8015AE2C.o,tail5.data.o,ov_SC03_089_jr_8016AB6C.o,tail6.data.o,ov_SC03_089_jr_801734BC.o,tail7.data.o,ov_SC03_089_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_089_jr_8015444C.o,tail4.data.o,ov_SC03_089_jr_8015A3C8.o,tail5.data.o,ov_SC03_089_jr_8015AE2C.o,tail6.data.o,ov_SC03_089_jr_8016AB6C.o,tail7.data.o,ov_SC03_089_jr_801734BC.o,tail8.data.o,ov_SC03_089_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_089_CHECK_SHA := config/check.ov_SC03_089.sha ov_SC03_089_SYMBOLS := config/symbols.ov_SC03_089.txt ov_SC03_089_SIG := .run/sig.ov_SC03_089.jsonl @@ -1143,7 +1143,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_8013FFD8.o,tail3.data.o,ov_SC03_090_after.o,tail4.data.o,ov_SC03_090_jr_8015AE2C.o,tail5.data.o,ov_SC03_090_jr_8016AB6C.o,tail6.data.o,ov_SC03_090_jr_801734BC.o,tail7.data.o,ov_SC03_090_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_090_jr_8015444C.o,tail4.data.o,ov_SC03_090_jr_8015A3C8.o,tail5.data.o,ov_SC03_090_jr_8015AE2C.o,tail6.data.o,ov_SC03_090_jr_8016AB6C.o,tail7.data.o,ov_SC03_090_jr_801734BC.o,tail8.data.o,ov_SC03_090_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_090_CHECK_SHA := config/check.ov_SC03_090.sha ov_SC03_090_SYMBOLS := config/symbols.ov_SC03_090.txt ov_SC03_090_SIG := .run/sig.ov_SC03_090.jsonl @@ -1165,7 +1165,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_8013FFD8.o,tail3.data.o,ov_SC03_091_after.o,tail4.data.o,ov_SC03_091_jr_8015AE2C.o,tail5.data.o,ov_SC03_091_jr_8016AB6C.o,tail6.data.o,ov_SC03_091_jr_801734BC.o,tail7.data.o,ov_SC03_091_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_091_jr_8015444C.o,tail4.data.o,ov_SC03_091_jr_8015A3C8.o,tail5.data.o,ov_SC03_091_jr_8015AE2C.o,tail6.data.o,ov_SC03_091_jr_8016AB6C.o,tail7.data.o,ov_SC03_091_jr_801734BC.o,tail8.data.o,ov_SC03_091_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_091_CHECK_SHA := config/check.ov_SC03_091.sha ov_SC03_091_SYMBOLS := config/symbols.ov_SC03_091.txt ov_SC03_091_SIG := .run/sig.ov_SC03_091.jsonl @@ -1187,7 +1187,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_8013FFD8.o,tail3.data.o,ov_SC03_092_after.o,tail4.data.o,ov_SC03_092_jr_8015AE2C.o,tail5.data.o,ov_SC03_092_jr_8016AB6C.o,tail6.data.o,ov_SC03_092_jr_801734BC.o,tail7.data.o,ov_SC03_092_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_092_jr_8015444C.o,tail4.data.o,ov_SC03_092_jr_8015A3C8.o,tail5.data.o,ov_SC03_092_jr_8015AE2C.o,tail6.data.o,ov_SC03_092_jr_8016AB6C.o,tail7.data.o,ov_SC03_092_jr_801734BC.o,tail8.data.o,ov_SC03_092_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_092_CHECK_SHA := config/check.ov_SC03_092.sha ov_SC03_092_SYMBOLS := config/symbols.ov_SC03_092.txt ov_SC03_092_SIG := .run/sig.ov_SC03_092.jsonl @@ -1209,7 +1209,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_8013FFD8.o,tail3.data.o,ov_SC03_093_after.o,tail4.data.o,ov_SC03_093_jr_8015AE2C.o,tail5.data.o,ov_SC03_093_jr_8016AB6C.o,tail6.data.o,ov_SC03_093_jr_801734BC.o,tail7.data.o,ov_SC03_093_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_093_jr_8015444C.o,tail4.data.o,ov_SC03_093_jr_8015A3C8.o,tail5.data.o,ov_SC03_093_jr_8015AE2C.o,tail6.data.o,ov_SC03_093_jr_8016AB6C.o,tail7.data.o,ov_SC03_093_jr_801734BC.o,tail8.data.o,ov_SC03_093_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_093_CHECK_SHA := config/check.ov_SC03_093.sha ov_SC03_093_SYMBOLS := config/symbols.ov_SC03_093.txt ov_SC03_093_SIG := .run/sig.ov_SC03_093.jsonl @@ -1231,7 +1231,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_8013FFD8.o,tail3.data.o,ov_SC03_094_after.o,tail4.data.o,ov_SC03_094_jr_8015AE2C.o,tail5.data.o,ov_SC03_094_jr_8016AB6C.o,tail6.data.o,ov_SC03_094_jr_801734BC.o,tail7.data.o,ov_SC03_094_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_094_jr_8015444C.o,tail4.data.o,ov_SC03_094_jr_8015A3C8.o,tail5.data.o,ov_SC03_094_jr_8015AE2C.o,tail6.data.o,ov_SC03_094_jr_8016AB6C.o,tail7.data.o,ov_SC03_094_jr_801734BC.o,tail8.data.o,ov_SC03_094_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_094_CHECK_SHA := config/check.ov_SC03_094.sha ov_SC03_094_SYMBOLS := config/symbols.ov_SC03_094.txt ov_SC03_094_SIG := .run/sig.ov_SC03_094.jsonl @@ -1253,7 +1253,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_8013FFD8.o,tail3.data.o,ov_SC03_095_after.o,tail4.data.o,ov_SC03_095_jr_8015AE2C.o,tail5.data.o,ov_SC03_095_jr_8016AB6C.o,tail6.data.o,ov_SC03_095_jr_801734BC.o,tail7.data.o,ov_SC03_095_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_095_jr_8015444C.o,tail4.data.o,ov_SC03_095_jr_8015A3C8.o,tail5.data.o,ov_SC03_095_jr_8015AE2C.o,tail6.data.o,ov_SC03_095_jr_8016AB6C.o,tail7.data.o,ov_SC03_095_jr_801734BC.o,tail8.data.o,ov_SC03_095_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_095_CHECK_SHA := config/check.ov_SC03_095.sha ov_SC03_095_SYMBOLS := config/symbols.ov_SC03_095.txt ov_SC03_095_SIG := .run/sig.ov_SC03_095.jsonl @@ -1275,7 +1275,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_8013FFD8.o,tail3.data.o,ov_SC03_096_after.o,tail4.data.o,ov_SC03_096_jr_8015AE2C.o,tail5.data.o,ov_SC03_096_jr_8016AB6C.o,tail6.data.o,ov_SC03_096_jr_801734BC.o,tail7.data.o,ov_SC03_096_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_096_jr_8015444C.o,tail4.data.o,ov_SC03_096_jr_8015A3C8.o,tail5.data.o,ov_SC03_096_jr_8015AE2C.o,tail6.data.o,ov_SC03_096_jr_8016AB6C.o,tail7.data.o,ov_SC03_096_jr_801734BC.o,tail8.data.o,ov_SC03_096_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_096_CHECK_SHA := config/check.ov_SC03_096.sha ov_SC03_096_SYMBOLS := config/symbols.ov_SC03_096.txt ov_SC03_096_SIG := .run/sig.ov_SC03_096.jsonl @@ -1297,7 +1297,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_8013FFD8.o,tail3.data.o,ov_SC03_097_after.o,tail4.data.o,ov_SC03_097_jr_8015AE2C.o,tail5.data.o,ov_SC03_097_jr_8016AB6C.o,tail6.data.o,ov_SC03_097_jr_801734BC.o,tail7.data.o,ov_SC03_097_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_097_jr_8015444C.o,tail4.data.o,ov_SC03_097_jr_8015A3C8.o,tail5.data.o,ov_SC03_097_jr_8015AE2C.o,tail6.data.o,ov_SC03_097_jr_8016AB6C.o,tail7.data.o,ov_SC03_097_jr_801734BC.o,tail8.data.o,ov_SC03_097_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_097_CHECK_SHA := config/check.ov_SC03_097.sha ov_SC03_097_SYMBOLS := config/symbols.ov_SC03_097.txt ov_SC03_097_SIG := .run/sig.ov_SC03_097.jsonl @@ -1319,7 +1319,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_8013FFD8.o,tail3.data.o,ov_SC03_098_after.o,tail4.data.o,ov_SC03_098_jr_8015AE2C.o,tail5.data.o,ov_SC03_098_jr_8016AB6C.o,tail6.data.o,ov_SC03_098_jr_801734BC.o,tail7.data.o,ov_SC03_098_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_098_jr_8015444C.o,tail4.data.o,ov_SC03_098_jr_8015A3C8.o,tail5.data.o,ov_SC03_098_jr_8015AE2C.o,tail6.data.o,ov_SC03_098_jr_8016AB6C.o,tail7.data.o,ov_SC03_098_jr_801734BC.o,tail8.data.o,ov_SC03_098_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_098_CHECK_SHA := config/check.ov_SC03_098.sha ov_SC03_098_SYMBOLS := config/symbols.ov_SC03_098.txt ov_SC03_098_SIG := .run/sig.ov_SC03_098.jsonl @@ -1341,7 +1341,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_8013FFD8.o,tail3.data.o,ov_SC03_099_after.o,tail4.data.o,ov_SC03_099_jr_8015AE2C.o,tail5.data.o,ov_SC03_099_jr_8016AB6C.o,tail6.data.o,ov_SC03_099_jr_801734BC.o,tail7.data.o,ov_SC03_099_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_099_jr_8015444C.o,tail4.data.o,ov_SC03_099_jr_8015A3C8.o,tail5.data.o,ov_SC03_099_jr_8015AE2C.o,tail6.data.o,ov_SC03_099_jr_8016AB6C.o,tail7.data.o,ov_SC03_099_jr_801734BC.o,tail8.data.o,ov_SC03_099_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_099_CHECK_SHA := config/check.ov_SC03_099.sha ov_SC03_099_SYMBOLS := config/symbols.ov_SC03_099.txt ov_SC03_099_SIG := .run/sig.ov_SC03_099.jsonl @@ -1363,7 +1363,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_8013FFD8.o,tail3.data.o,ov_SC03_100_after.o,tail4.data.o,ov_SC03_100_jr_8015AE2C.o,tail5.data.o,ov_SC03_100_jr_8016AB6C.o,tail6.data.o,ov_SC03_100_jr_801734BC.o,tail7.data.o,ov_SC03_100_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_100_jr_8015444C.o,tail4.data.o,ov_SC03_100_jr_8015A3C8.o,tail5.data.o,ov_SC03_100_jr_8015AE2C.o,tail6.data.o,ov_SC03_100_jr_8016AB6C.o,tail7.data.o,ov_SC03_100_jr_801734BC.o,tail8.data.o,ov_SC03_100_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_100_CHECK_SHA := config/check.ov_SC03_100.sha ov_SC03_100_SYMBOLS := config/symbols.ov_SC03_100.txt ov_SC03_100_SIG := .run/sig.ov_SC03_100.jsonl @@ -1385,7 +1385,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_8013FFD8.o,tail3.data.o,ov_SC03_101_after.o,tail4.data.o,ov_SC03_101_jr_8015AE2C.o,tail5.data.o,ov_SC03_101_jr_8016AB6C.o,tail6.data.o,ov_SC03_101_jr_801734BC.o,tail7.data.o,ov_SC03_101_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_101_jr_8015444C.o,tail4.data.o,ov_SC03_101_jr_8015A3C8.o,tail5.data.o,ov_SC03_101_jr_8015AE2C.o,tail6.data.o,ov_SC03_101_jr_8016AB6C.o,tail7.data.o,ov_SC03_101_jr_801734BC.o,tail8.data.o,ov_SC03_101_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_101_CHECK_SHA := config/check.ov_SC03_101.sha ov_SC03_101_SYMBOLS := config/symbols.ov_SC03_101.txt ov_SC03_101_SIG := .run/sig.ov_SC03_101.jsonl @@ -1407,7 +1407,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_8013FFD8.o,tail3.data.o,ov_SC03_102_after.o,tail4.data.o,ov_SC03_102_jr_8015AE2C.o,tail5.data.o,ov_SC03_102_jr_8016AB6C.o,tail6.data.o,ov_SC03_102_jr_801734BC.o,tail7.data.o,ov_SC03_102_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_102_jr_8015444C.o,tail4.data.o,ov_SC03_102_jr_8015A3C8.o,tail5.data.o,ov_SC03_102_jr_8015AE2C.o,tail6.data.o,ov_SC03_102_jr_8016AB6C.o,tail7.data.o,ov_SC03_102_jr_801734BC.o,tail8.data.o,ov_SC03_102_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_102_CHECK_SHA := config/check.ov_SC03_102.sha ov_SC03_102_SYMBOLS := config/symbols.ov_SC03_102.txt ov_SC03_102_SIG := .run/sig.ov_SC03_102.jsonl @@ -1429,7 +1429,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.o,tail2.data.o,ov_SC03_103_after.o,tail3.data.o,ov_SC03_103_jr_8015AE2C.o,tail4.data.o,ov_SC03_103_jr_8016AB6C.o,tail5.data.o,ov_SC03_103_jr_801734BC.o,tail6.data.o,ov_SC03_103_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_103_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_103.o,tail2.data.o,ov_SC03_103_jr_8015444C.o,tail3.data.o,ov_SC03_103_jr_8015A3C8.o,tail4.data.o,ov_SC03_103_jr_8015AE2C.o,tail5.data.o,ov_SC03_103_jr_8016AB6C.o,tail6.data.o,ov_SC03_103_jr_801734BC.o,tail7.data.o,ov_SC03_103_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_103_CHECK_SHA := config/check.ov_SC03_103.sha ov_SC03_103_SYMBOLS := config/symbols.ov_SC03_103.txt ov_SC03_103_SIG := .run/sig.ov_SC03_103.jsonl @@ -1451,7 +1451,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_8013FFD8.o,tail3.data.o,ov_SC03_104_after.o,tail4.data.o,ov_SC03_104_jr_8015AE2C.o,tail5.data.o,ov_SC03_104_jr_8016AB6C.o,tail6.data.o,ov_SC03_104_jr_801734BC.o,tail7.data.o,ov_SC03_104_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_104_jr_8015444C.o,tail4.data.o,ov_SC03_104_jr_8015A3C8.o,tail5.data.o,ov_SC03_104_jr_8015AE2C.o,tail6.data.o,ov_SC03_104_jr_8016AB6C.o,tail7.data.o,ov_SC03_104_jr_801734BC.o,tail8.data.o,ov_SC03_104_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_104_CHECK_SHA := config/check.ov_SC03_104.sha ov_SC03_104_SYMBOLS := config/symbols.ov_SC03_104.txt ov_SC03_104_SIG := .run/sig.ov_SC03_104.jsonl @@ -1473,7 +1473,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_8013FFD8.o,tail3.data.o,ov_SC03_105_after.o,tail4.data.o,ov_SC03_105_jr_8015AE2C.o,tail5.data.o,ov_SC03_105_jr_8016AB6C.o,tail6.data.o,ov_SC03_105_jr_801734BC.o,tail7.data.o,ov_SC03_105_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_105_jr_8015444C.o,tail4.data.o,ov_SC03_105_jr_8015A3C8.o,tail5.data.o,ov_SC03_105_jr_8015AE2C.o,tail6.data.o,ov_SC03_105_jr_8016AB6C.o,tail7.data.o,ov_SC03_105_jr_801734BC.o,tail8.data.o,ov_SC03_105_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_105_CHECK_SHA := config/check.ov_SC03_105.sha ov_SC03_105_SYMBOLS := config/symbols.ov_SC03_105.txt ov_SC03_105_SIG := .run/sig.ov_SC03_105.jsonl @@ -1495,7 +1495,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_8013FFD8.o,tail3.data.o,ov_SC03_108_after.o,tail4.data.o,ov_SC03_108_jr_8015AE2C.o,tail5.data.o,ov_SC03_108_jr_8016AB6C.o,tail6.data.o,ov_SC03_108_jr_801734BC.o,tail7.data.o,ov_SC03_108_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_108_jr_8015444C.o,tail4.data.o,ov_SC03_108_jr_8015A3C8.o,tail5.data.o,ov_SC03_108_jr_8015AE2C.o,tail6.data.o,ov_SC03_108_jr_8016AB6C.o,tail7.data.o,ov_SC03_108_jr_801734BC.o,tail8.data.o,ov_SC03_108_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_108_CHECK_SHA := config/check.ov_SC03_108.sha ov_SC03_108_SYMBOLS := config/symbols.ov_SC03_108.txt ov_SC03_108_SIG := .run/sig.ov_SC03_108.jsonl @@ -1517,7 +1517,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_8013FFD8.o,tail3.data.o,ov_SC03_109_after.o,tail4.data.o,ov_SC03_109_jr_8015AE2C.o,tail5.data.o,ov_SC03_109_jr_8016AB6C.o,tail6.data.o,ov_SC03_109_jr_801734BC.o,tail7.data.o,ov_SC03_109_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_109_jr_8015444C.o,tail4.data.o,ov_SC03_109_jr_8015A3C8.o,tail5.data.o,ov_SC03_109_jr_8015AE2C.o,tail6.data.o,ov_SC03_109_jr_8016AB6C.o,tail7.data.o,ov_SC03_109_jr_801734BC.o,tail8.data.o,ov_SC03_109_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_109_CHECK_SHA := config/check.ov_SC03_109.sha ov_SC03_109_SYMBOLS := config/symbols.ov_SC03_109.txt ov_SC03_109_SIG := .run/sig.ov_SC03_109.jsonl @@ -1539,7 +1539,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_8013FFD8.o,tail3.data.o,ov_SC03_110_after.o,tail4.data.o,ov_SC03_110_jr_8015AE2C.o,tail5.data.o,ov_SC03_110_jr_8016AB6C.o,tail6.data.o,ov_SC03_110_jr_801734BC.o,tail7.data.o,ov_SC03_110_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_110_jr_8015444C.o,tail4.data.o,ov_SC03_110_jr_8015A3C8.o,tail5.data.o,ov_SC03_110_jr_8015AE2C.o,tail6.data.o,ov_SC03_110_jr_8016AB6C.o,tail7.data.o,ov_SC03_110_jr_801734BC.o,tail8.data.o,ov_SC03_110_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_110_CHECK_SHA := config/check.ov_SC03_110.sha ov_SC03_110_SYMBOLS := config/symbols.ov_SC03_110.txt ov_SC03_110_SIG := .run/sig.ov_SC03_110.jsonl @@ -1561,7 +1561,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_8013FFD8.o,tail3.data.o,ov_SC03_111_after.o,tail4.data.o,ov_SC03_111_jr_8015AE2C.o,tail5.data.o,ov_SC03_111_jr_8016AB6C.o,tail6.data.o,ov_SC03_111_jr_801734BC.o,tail7.data.o,ov_SC03_111_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_111_jr_8015444C.o,tail4.data.o,ov_SC03_111_jr_8015A3C8.o,tail5.data.o,ov_SC03_111_jr_8015AE2C.o,tail6.data.o,ov_SC03_111_jr_8016AB6C.o,tail7.data.o,ov_SC03_111_jr_801734BC.o,tail8.data.o,ov_SC03_111_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_111_CHECK_SHA := config/check.ov_SC03_111.sha ov_SC03_111_SYMBOLS := config/symbols.ov_SC03_111.txt ov_SC03_111_SIG := .run/sig.ov_SC03_111.jsonl @@ -1583,7 +1583,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_8013FFD8.o,tail3.data.o,ov_SC03_112_after.o,tail4.data.o,ov_SC03_112_jr_8015AE2C.o,tail5.data.o,ov_SC03_112_jr_8016AB6C.o,tail6.data.o,ov_SC03_112_jr_801734BC.o,tail7.data.o,ov_SC03_112_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_112_jr_8015444C.o,tail4.data.o,ov_SC03_112_jr_8015A3C8.o,tail5.data.o,ov_SC03_112_jr_8015AE2C.o,tail6.data.o,ov_SC03_112_jr_8016AB6C.o,tail7.data.o,ov_SC03_112_jr_801734BC.o,tail8.data.o,ov_SC03_112_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_112_CHECK_SHA := config/check.ov_SC03_112.sha ov_SC03_112_SYMBOLS := config/symbols.ov_SC03_112.txt ov_SC03_112_SIG := .run/sig.ov_SC03_112.jsonl @@ -1605,7 +1605,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_8013FFD8.o,tail3.data.o,ov_SC03_113_after.o,tail4.data.o,ov_SC03_113_jr_8015AE2C.o,tail5.data.o,ov_SC03_113_jr_8016AB6C.o,tail6.data.o,ov_SC03_113_jr_801734BC.o,tail7.data.o,ov_SC03_113_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_113_jr_8015444C.o,tail4.data.o,ov_SC03_113_jr_8015A3C8.o,tail5.data.o,ov_SC03_113_jr_8015AE2C.o,tail6.data.o,ov_SC03_113_jr_8016AB6C.o,tail7.data.o,ov_SC03_113_jr_801734BC.o,tail8.data.o,ov_SC03_113_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_113_CHECK_SHA := config/check.ov_SC03_113.sha ov_SC03_113_SYMBOLS := config/symbols.ov_SC03_113.txt ov_SC03_113_SIG := .run/sig.ov_SC03_113.jsonl @@ -1627,7 +1627,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_8013FFD8.o,tail3.data.o,ov_SC03_114_after.o,tail4.data.o,ov_SC03_114_jr_8015AE2C.o,tail5.data.o,ov_SC03_114_jr_8016AB6C.o,tail6.data.o,ov_SC03_114_jr_801734BC.o,tail7.data.o,ov_SC03_114_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_114_jr_8015444C.o,tail4.data.o,ov_SC03_114_jr_8015A3C8.o,tail5.data.o,ov_SC03_114_jr_8015AE2C.o,tail6.data.o,ov_SC03_114_jr_8016AB6C.o,tail7.data.o,ov_SC03_114_jr_801734BC.o,tail8.data.o,ov_SC03_114_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_114_CHECK_SHA := config/check.ov_SC03_114.sha ov_SC03_114_SYMBOLS := config/symbols.ov_SC03_114.txt ov_SC03_114_SIG := .run/sig.ov_SC03_114.jsonl @@ -1649,7 +1649,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_8013FFD8.o,tail3.data.o,ov_SC03_115_after.o,tail4.data.o,ov_SC03_115_jr_8015AE2C.o,tail5.data.o,ov_SC03_115_jr_8016AB6C.o,tail6.data.o,ov_SC03_115_jr_801734BC.o,tail7.data.o,ov_SC03_115_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_115_jr_8015444C.o,tail4.data.o,ov_SC03_115_jr_8015A3C8.o,tail5.data.o,ov_SC03_115_jr_8015AE2C.o,tail6.data.o,ov_SC03_115_jr_8016AB6C.o,tail7.data.o,ov_SC03_115_jr_801734BC.o,tail8.data.o,ov_SC03_115_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_115_CHECK_SHA := config/check.ov_SC03_115.sha ov_SC03_115_SYMBOLS := config/symbols.ov_SC03_115.txt ov_SC03_115_SIG := .run/sig.ov_SC03_115.jsonl @@ -1671,7 +1671,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_8013FFD8.o,tail3.data.o,ov_SC03_116_after.o,tail4.data.o,ov_SC03_116_jr_8015AE2C.o,tail5.data.o,ov_SC03_116_jr_8016AB6C.o,tail6.data.o,ov_SC03_116_jr_801734BC.o,tail7.data.o,ov_SC03_116_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_116_jr_8015444C.o,tail4.data.o,ov_SC03_116_jr_8015A3C8.o,tail5.data.o,ov_SC03_116_jr_8015AE2C.o,tail6.data.o,ov_SC03_116_jr_8016AB6C.o,tail7.data.o,ov_SC03_116_jr_801734BC.o,tail8.data.o,ov_SC03_116_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_116_CHECK_SHA := config/check.ov_SC03_116.sha ov_SC03_116_SYMBOLS := config/symbols.ov_SC03_116.txt ov_SC03_116_SIG := .run/sig.ov_SC03_116.jsonl @@ -1693,7 +1693,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_8013FFD8.o,tail3.data.o,ov_SC03_117_after.o,tail4.data.o,ov_SC03_117_jr_8015AE2C.o,tail5.data.o,ov_SC03_117_jr_8016AB6C.o,tail6.data.o,ov_SC03_117_jr_801734BC.o,tail7.data.o,ov_SC03_117_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_117_jr_8015444C.o,tail4.data.o,ov_SC03_117_jr_8015A3C8.o,tail5.data.o,ov_SC03_117_jr_8015AE2C.o,tail6.data.o,ov_SC03_117_jr_8016AB6C.o,tail7.data.o,ov_SC03_117_jr_801734BC.o,tail8.data.o,ov_SC03_117_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_117_CHECK_SHA := config/check.ov_SC03_117.sha ov_SC03_117_SYMBOLS := config/symbols.ov_SC03_117.txt ov_SC03_117_SIG := .run/sig.ov_SC03_117.jsonl @@ -1715,7 +1715,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_8013FFD8.o,tail3.data.o,ov_SC03_118_after.o,tail4.data.o,ov_SC03_118_jr_8015AE2C.o,tail5.data.o,ov_SC03_118_jr_8016AB6C.o,tail6.data.o,ov_SC03_118_jr_801734BC.o,tail7.data.o,ov_SC03_118_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_118_jr_8015444C.o,tail4.data.o,ov_SC03_118_jr_8015A3C8.o,tail5.data.o,ov_SC03_118_jr_8015AE2C.o,tail6.data.o,ov_SC03_118_jr_8016AB6C.o,tail7.data.o,ov_SC03_118_jr_801734BC.o,tail8.data.o,ov_SC03_118_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_118_CHECK_SHA := config/check.ov_SC03_118.sha ov_SC03_118_SYMBOLS := config/symbols.ov_SC03_118.txt ov_SC03_118_SIG := .run/sig.ov_SC03_118.jsonl @@ -1737,7 +1737,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_8013FFD8.o,tail3.data.o,ov_SC03_119_after.o,tail4.data.o,ov_SC03_119_jr_8015AE2C.o,tail5.data.o,ov_SC03_119_jr_8016AB6C.o,tail6.data.o,ov_SC03_119_jr_801734BC.o,tail7.data.o,ov_SC03_119_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_119_jr_8015444C.o,tail4.data.o,ov_SC03_119_jr_8015A3C8.o,tail5.data.o,ov_SC03_119_jr_8015AE2C.o,tail6.data.o,ov_SC03_119_jr_8016AB6C.o,tail7.data.o,ov_SC03_119_jr_801734BC.o,tail8.data.o,ov_SC03_119_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_119_CHECK_SHA := config/check.ov_SC03_119.sha ov_SC03_119_SYMBOLS := config/symbols.ov_SC03_119.txt ov_SC03_119_SIG := .run/sig.ov_SC03_119.jsonl @@ -1759,7 +1759,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_8013FFD8.o,tail3.data.o,ov_SC03_121_after.o,tail4.data.o,ov_SC03_121_jr_8015AE2C.o,tail5.data.o,ov_SC03_121_jr_8016AB6C.o,tail6.data.o,ov_SC03_121_jr_801734BC.o,tail7.data.o,ov_SC03_121_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_121_jr_8015444C.o,tail4.data.o,ov_SC03_121_jr_8015A3C8.o,tail5.data.o,ov_SC03_121_jr_8015AE2C.o,tail6.data.o,ov_SC03_121_jr_8016AB6C.o,tail7.data.o,ov_SC03_121_jr_801734BC.o,tail8.data.o,ov_SC03_121_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_121_CHECK_SHA := config/check.ov_SC03_121.sha ov_SC03_121_SYMBOLS := config/symbols.ov_SC03_121.txt ov_SC03_121_SIG := .run/sig.ov_SC03_121.jsonl @@ -1781,7 +1781,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_8013FFD8.o,tail3.data.o,ov_SC03_124_after.o,tail4.data.o,ov_SC03_124_jr_8015AE2C.o,tail5.data.o,ov_SC03_124_jr_8016AB6C.o,tail6.data.o,ov_SC03_124_jr_801734BC.o,tail7.data.o,ov_SC03_124_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_124_jr_8015444C.o,tail4.data.o,ov_SC03_124_jr_8015A3C8.o,tail5.data.o,ov_SC03_124_jr_8015AE2C.o,tail6.data.o,ov_SC03_124_jr_8016AB6C.o,tail7.data.o,ov_SC03_124_jr_801734BC.o,tail8.data.o,ov_SC03_124_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_124_CHECK_SHA := config/check.ov_SC03_124.sha ov_SC03_124_SYMBOLS := config/symbols.ov_SC03_124.txt ov_SC03_124_SIG := .run/sig.ov_SC03_124.jsonl @@ -1803,7 +1803,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_8013FFD8.o,tail3.data.o,ov_SC03_125_after.o,tail4.data.o,ov_SC03_125_jr_8015AE2C.o,tail5.data.o,ov_SC03_125_jr_8016AB6C.o,tail6.data.o,ov_SC03_125_jr_801734BC.o,tail7.data.o,ov_SC03_125_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_125_jr_8015444C.o,tail4.data.o,ov_SC03_125_jr_8015A3C8.o,tail5.data.o,ov_SC03_125_jr_8015AE2C.o,tail6.data.o,ov_SC03_125_jr_8016AB6C.o,tail7.data.o,ov_SC03_125_jr_801734BC.o,tail8.data.o,ov_SC03_125_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_125_CHECK_SHA := config/check.ov_SC03_125.sha ov_SC03_125_SYMBOLS := config/symbols.ov_SC03_125.txt ov_SC03_125_SIG := .run/sig.ov_SC03_125.jsonl @@ -1825,7 +1825,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_8013FFD8.o,tail3.data.o,ov_SC03_126_after.o,tail4.data.o,ov_SC03_126_jr_8015AE2C.o,tail5.data.o,ov_SC03_126_jr_8016AB6C.o,tail6.data.o,ov_SC03_126_jr_801734BC.o,tail7.data.o,ov_SC03_126_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC03_126_jr_8015444C.o,tail4.data.o,ov_SC03_126_jr_8015A3C8.o,tail5.data.o,ov_SC03_126_jr_8015AE2C.o,tail6.data.o,ov_SC03_126_jr_8016AB6C.o,tail7.data.o,ov_SC03_126_jr_801734BC.o,tail8.data.o,ov_SC03_126_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC03_126_CHECK_SHA := config/check.ov_SC03_126.sha ov_SC03_126_SYMBOLS := config/symbols.ov_SC03_126.txt ov_SC03_126_SIG := .run/sig.ov_SC03_126.jsonl @@ -1847,7 +1847,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_8013FFD8.o,tail3.data.o,ov_SC04_002_after.o,tail4.data.o,ov_SC04_002_jr_8015AE2C.o,tail5.data.o,ov_SC04_002_jr_8016AB6C.o,tail6.data.o,ov_SC04_002_jr_801734BC.o,tail7.data.o,ov_SC04_002_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_002_jr_8015444C.o,tail4.data.o,ov_SC04_002_jr_8015A3C8.o,tail5.data.o,ov_SC04_002_jr_8015AE2C.o,tail6.data.o,ov_SC04_002_jr_8016AB6C.o,tail7.data.o,ov_SC04_002_jr_801734BC.o,tail8.data.o,ov_SC04_002_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_002_CHECK_SHA := config/check.ov_SC04_002.sha ov_SC04_002_SYMBOLS := config/symbols.ov_SC04_002.txt ov_SC04_002_SIG := .run/sig.ov_SC04_002.jsonl @@ -1869,7 +1869,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_8013FFD8.o,tail3.data.o,ov_SC04_003_after.o,tail4.data.o,ov_SC04_003_jr_8015AE2C.o,tail5.data.o,ov_SC04_003_jr_8016AB6C.o,tail6.data.o,ov_SC04_003_jr_801734BC.o,tail7.data.o,ov_SC04_003_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_003_jr_8015444C.o,tail4.data.o,ov_SC04_003_jr_8015A3C8.o,tail5.data.o,ov_SC04_003_jr_8015AE2C.o,tail6.data.o,ov_SC04_003_jr_8016AB6C.o,tail7.data.o,ov_SC04_003_jr_801734BC.o,tail8.data.o,ov_SC04_003_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_003_CHECK_SHA := config/check.ov_SC04_003.sha ov_SC04_003_SYMBOLS := config/symbols.ov_SC04_003.txt ov_SC04_003_SIG := .run/sig.ov_SC04_003.jsonl @@ -1891,7 +1891,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_8013FFD8.o,tail3.data.o,ov_SC04_004_after.o,tail4.data.o,ov_SC04_004_jr_8015AE2C.o,tail5.data.o,ov_SC04_004_jr_8016AB6C.o,tail6.data.o,ov_SC04_004_jr_801734BC.o,tail7.data.o,ov_SC04_004_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_004_jr_8015444C.o,tail4.data.o,ov_SC04_004_jr_8015A3C8.o,tail5.data.o,ov_SC04_004_jr_8015AE2C.o,tail6.data.o,ov_SC04_004_jr_8016AB6C.o,tail7.data.o,ov_SC04_004_jr_801734BC.o,tail8.data.o,ov_SC04_004_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_004_CHECK_SHA := config/check.ov_SC04_004.sha ov_SC04_004_SYMBOLS := config/symbols.ov_SC04_004.txt ov_SC04_004_SIG := .run/sig.ov_SC04_004.jsonl @@ -1913,7 +1913,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_8013FFD8.o,tail3.data.o,ov_SC04_005_after.o,tail4.data.o,ov_SC04_005_jr_8015AE2C.o,tail5.data.o,ov_SC04_005_jr_8016AB6C.o,tail6.data.o,ov_SC04_005_jr_801734BC.o,tail7.data.o,ov_SC04_005_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_005_jr_8015444C.o,tail4.data.o,ov_SC04_005_jr_8015A3C8.o,tail5.data.o,ov_SC04_005_jr_8015AE2C.o,tail6.data.o,ov_SC04_005_jr_8016AB6C.o,tail7.data.o,ov_SC04_005_jr_801734BC.o,tail8.data.o,ov_SC04_005_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_005_CHECK_SHA := config/check.ov_SC04_005.sha ov_SC04_005_SYMBOLS := config/symbols.ov_SC04_005.txt ov_SC04_005_SIG := .run/sig.ov_SC04_005.jsonl @@ -1935,7 +1935,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_8013FFD8.o,tail3.data.o,ov_SC04_006_after.o,tail4.data.o,ov_SC04_006_jr_8015AE2C.o,tail5.data.o,ov_SC04_006_jr_8016AB6C.o,tail6.data.o,ov_SC04_006_jr_801734BC.o,tail7.data.o,ov_SC04_006_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_006_jr_8015444C.o,tail4.data.o,ov_SC04_006_jr_8015A3C8.o,tail5.data.o,ov_SC04_006_jr_8015AE2C.o,tail6.data.o,ov_SC04_006_jr_8016AB6C.o,tail7.data.o,ov_SC04_006_jr_801734BC.o,tail8.data.o,ov_SC04_006_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_006_CHECK_SHA := config/check.ov_SC04_006.sha ov_SC04_006_SYMBOLS := config/symbols.ov_SC04_006.txt ov_SC04_006_SIG := .run/sig.ov_SC04_006.jsonl @@ -1957,7 +1957,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_8013FFD8.o,tail3.data.o,ov_SC04_007_after.o,tail4.data.o,ov_SC04_007_jr_8015AE2C.o,tail5.data.o,ov_SC04_007_jr_8016AB6C.o,tail6.data.o,ov_SC04_007_jr_801734BC.o,tail7.data.o,ov_SC04_007_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_007_jr_8015444C.o,tail4.data.o,ov_SC04_007_jr_8015A3C8.o,tail5.data.o,ov_SC04_007_jr_8015AE2C.o,tail6.data.o,ov_SC04_007_jr_8016AB6C.o,tail7.data.o,ov_SC04_007_jr_801734BC.o,tail8.data.o,ov_SC04_007_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_007_CHECK_SHA := config/check.ov_SC04_007.sha ov_SC04_007_SYMBOLS := config/symbols.ov_SC04_007.txt ov_SC04_007_SIG := .run/sig.ov_SC04_007.jsonl @@ -1979,7 +1979,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_8013FFD8.o,tail3.data.o,ov_SC04_008_jr_8015AE2C.o,tail4.data.o,ov_SC04_008_jr_8016AB6C.o,tail5.data.o,ov_SC04_008_jr_801734BC.o,tail6.data.o,ov_SC04_008_jr_80178D40.o,tail7.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_8013FFD8.o,tail3.data.o,ov_SC04_008_after.o,tail4.data.o,ov_SC04_008_jr_8015AE2C.o,tail5.data.o,ov_SC04_008_jr_8016AB6C.o,tail6.data.o,ov_SC04_008_jr_801734BC.o,tail7.data.o,ov_SC04_008_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_008_CHECK_SHA := config/check.ov_SC04_008.sha ov_SC04_008_SYMBOLS := config/symbols.ov_SC04_008.txt ov_SC04_008_SIG := .run/sig.ov_SC04_008.jsonl @@ -2001,7 +2001,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_8013FFD8.o,tail3.data.o,ov_SC04_009_after.o,tail4.data.o,ov_SC04_009_jr_8015AE2C.o,tail5.data.o,ov_SC04_009_jr_8016AB6C.o,tail6.data.o,ov_SC04_009_jr_801734BC.o,tail7.data.o,ov_SC04_009_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_009_jr_8015444C.o,tail4.data.o,ov_SC04_009_jr_8015A3C8.o,tail5.data.o,ov_SC04_009_jr_8015AE2C.o,tail6.data.o,ov_SC04_009_jr_8016AB6C.o,tail7.data.o,ov_SC04_009_jr_801734BC.o,tail8.data.o,ov_SC04_009_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_009_CHECK_SHA := config/check.ov_SC04_009.sha ov_SC04_009_SYMBOLS := config/symbols.ov_SC04_009.txt ov_SC04_009_SIG := .run/sig.ov_SC04_009.jsonl @@ -2023,7 +2023,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_8013FFD8.o,tail3.data.o,ov_SC04_010_after.o,tail4.data.o,ov_SC04_010_jr_8015AE2C.o,tail5.data.o,ov_SC04_010_jr_8016AB6C.o,tail6.data.o,ov_SC04_010_jr_801734BC.o,tail7.data.o,ov_SC04_010_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_010_jr_8015444C.o,tail4.data.o,ov_SC04_010_jr_8015A3C8.o,tail5.data.o,ov_SC04_010_jr_8015AE2C.o,tail6.data.o,ov_SC04_010_jr_8016AB6C.o,tail7.data.o,ov_SC04_010_jr_801734BC.o,tail8.data.o,ov_SC04_010_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_010_CHECK_SHA := config/check.ov_SC04_010.sha ov_SC04_010_SYMBOLS := config/symbols.ov_SC04_010.txt ov_SC04_010_SIG := .run/sig.ov_SC04_010.jsonl @@ -2045,7 +2045,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_8013FFD8.o,tail3.data.o,ov_SC04_011_after.o,tail4.data.o,ov_SC04_011_jr_8015AE2C.o,tail5.data.o,ov_SC04_011_jr_8016AB6C.o,tail6.data.o,ov_SC04_011_jr_801734BC.o,tail7.data.o,ov_SC04_011_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_011_jr_8015444C.o,tail4.data.o,ov_SC04_011_jr_8015A3C8.o,tail5.data.o,ov_SC04_011_jr_8015AE2C.o,tail6.data.o,ov_SC04_011_jr_8016AB6C.o,tail7.data.o,ov_SC04_011_jr_801734BC.o,tail8.data.o,ov_SC04_011_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_011_CHECK_SHA := config/check.ov_SC04_011.sha ov_SC04_011_SYMBOLS := config/symbols.ov_SC04_011.txt ov_SC04_011_SIG := .run/sig.ov_SC04_011.jsonl @@ -2067,7 +2067,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_8013FFD8.o,tail3.data.o,ov_SC04_012_after.o,tail4.data.o,ov_SC04_012_jr_8015AE2C.o,tail5.data.o,ov_SC04_012_jr_8016AB6C.o,tail6.data.o,ov_SC04_012_jr_801734BC.o,tail7.data.o,ov_SC04_012_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_012_jr_8015444C.o,tail4.data.o,ov_SC04_012_jr_8015A3C8.o,tail5.data.o,ov_SC04_012_jr_8015AE2C.o,tail6.data.o,ov_SC04_012_jr_8016AB6C.o,tail7.data.o,ov_SC04_012_jr_801734BC.o,tail8.data.o,ov_SC04_012_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_012_CHECK_SHA := config/check.ov_SC04_012.sha ov_SC04_012_SYMBOLS := config/symbols.ov_SC04_012.txt ov_SC04_012_SIG := .run/sig.ov_SC04_012.jsonl @@ -2089,7 +2089,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_8013FFD8.o,tail3.data.o,ov_SC04_015_after.o,tail4.data.o,ov_SC04_015_jr_8015AE2C.o,tail5.data.o,ov_SC04_015_jr_8016AB6C.o,tail6.data.o,ov_SC04_015_jr_801734BC.o,tail7.data.o,ov_SC04_015_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_015_jr_8015444C.o,tail4.data.o,ov_SC04_015_jr_8015A3C8.o,tail5.data.o,ov_SC04_015_jr_8015AE2C.o,tail6.data.o,ov_SC04_015_jr_8016AB6C.o,tail7.data.o,ov_SC04_015_jr_801734BC.o,tail8.data.o,ov_SC04_015_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_015_CHECK_SHA := config/check.ov_SC04_015.sha ov_SC04_015_SYMBOLS := config/symbols.ov_SC04_015.txt ov_SC04_015_SIG := .run/sig.ov_SC04_015.jsonl @@ -2111,7 +2111,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_8013FFD8.o,tail3.data.o,ov_SC04_016_after.o,tail4.data.o,ov_SC04_016_jr_8015AE2C.o,tail5.data.o,ov_SC04_016_jr_8016AB6C.o,tail6.data.o,ov_SC04_016_jr_801734BC.o,tail7.data.o,ov_SC04_016_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_016_jr_8015444C.o,tail4.data.o,ov_SC04_016_jr_8015A3C8.o,tail5.data.o,ov_SC04_016_jr_8015AE2C.o,tail6.data.o,ov_SC04_016_jr_8016AB6C.o,tail7.data.o,ov_SC04_016_jr_801734BC.o,tail8.data.o,ov_SC04_016_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_016_CHECK_SHA := config/check.ov_SC04_016.sha ov_SC04_016_SYMBOLS := config/symbols.ov_SC04_016.txt ov_SC04_016_SIG := .run/sig.ov_SC04_016.jsonl @@ -2133,7 +2133,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_8013FFD8.o,tail3.data.o,ov_SC04_020_after.o,tail4.data.o,ov_SC04_020_jr_8015AE2C.o,tail5.data.o,ov_SC04_020_jr_8016AB6C.o,tail6.data.o,ov_SC04_020_jr_801734BC.o,tail7.data.o,ov_SC04_020_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_020_jr_8015444C.o,tail4.data.o,ov_SC04_020_jr_8015A3C8.o,tail5.data.o,ov_SC04_020_jr_8015AE2C.o,tail6.data.o,ov_SC04_020_jr_8016AB6C.o,tail7.data.o,ov_SC04_020_jr_801734BC.o,tail8.data.o,ov_SC04_020_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_020_CHECK_SHA := config/check.ov_SC04_020.sha ov_SC04_020_SYMBOLS := config/symbols.ov_SC04_020.txt ov_SC04_020_SIG := .run/sig.ov_SC04_020.jsonl @@ -2155,7 +2155,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_8013FFD8.o,tail3.data.o,ov_SC04_021_after.o,tail4.data.o,ov_SC04_021_jr_8015AE2C.o,tail5.data.o,ov_SC04_021_jr_8016AB6C.o,tail6.data.o,ov_SC04_021_jr_801734BC.o,tail7.data.o,ov_SC04_021_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC04_021_jr_8015444C.o,tail4.data.o,ov_SC04_021_jr_8015A3C8.o,tail5.data.o,ov_SC04_021_jr_8015AE2C.o,tail6.data.o,ov_SC04_021_jr_8016AB6C.o,tail7.data.o,ov_SC04_021_jr_801734BC.o,tail8.data.o,ov_SC04_021_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC04_021_CHECK_SHA := config/check.ov_SC04_021.sha ov_SC04_021_SYMBOLS := config/symbols.ov_SC04_021.txt ov_SC04_021_SIG := .run/sig.ov_SC04_021.jsonl @@ -2177,7 +2177,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_8013FFD8.o,tail3.data.o,ov_SC05_001_after.o,tail4.data.o,ov_SC05_001_jr_8015AE2C.o,tail5.data.o,ov_SC05_001_jr_8016AB6C.o,tail6.data.o,ov_SC05_001_jr_801734BC.o,tail7.data.o,ov_SC05_001_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_001_jr_8015444C.o,tail4.data.o,ov_SC05_001_jr_8015A3C8.o,tail5.data.o,ov_SC05_001_jr_8015AE2C.o,tail6.data.o,ov_SC05_001_jr_8016AB6C.o,tail7.data.o,ov_SC05_001_jr_801734BC.o,tail8.data.o,ov_SC05_001_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_001_CHECK_SHA := config/check.ov_SC05_001.sha ov_SC05_001_SYMBOLS := config/symbols.ov_SC05_001.txt ov_SC05_001_SIG := .run/sig.ov_SC05_001.jsonl @@ -2199,7 +2199,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_8013FFD8.o,tail3.data.o,ov_SC05_002_after.o,tail4.data.o,ov_SC05_002_jr_8015AE2C.o,tail5.data.o,ov_SC05_002_jr_8016AB6C.o,tail6.data.o,ov_SC05_002_jr_801734BC.o,tail7.data.o,ov_SC05_002_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_002_jr_8015444C.o,tail4.data.o,ov_SC05_002_jr_8015A3C8.o,tail5.data.o,ov_SC05_002_jr_8015AE2C.o,tail6.data.o,ov_SC05_002_jr_8016AB6C.o,tail7.data.o,ov_SC05_002_jr_801734BC.o,tail8.data.o,ov_SC05_002_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_002_CHECK_SHA := config/check.ov_SC05_002.sha ov_SC05_002_SYMBOLS := config/symbols.ov_SC05_002.txt ov_SC05_002_SIG := .run/sig.ov_SC05_002.jsonl @@ -2221,7 +2221,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_8013FFD8.o,tail3.data.o,ov_SC05_003_after.o,tail4.data.o,ov_SC05_003_jr_8015AE2C.o,tail5.data.o,ov_SC05_003_jr_8016AB6C.o,tail6.data.o,ov_SC05_003_jr_801734BC.o,tail7.data.o,ov_SC05_003_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_003_jr_8015444C.o,tail4.data.o,ov_SC05_003_jr_8015A3C8.o,tail5.data.o,ov_SC05_003_jr_8015AE2C.o,tail6.data.o,ov_SC05_003_jr_8016AB6C.o,tail7.data.o,ov_SC05_003_jr_801734BC.o,tail8.data.o,ov_SC05_003_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_003_CHECK_SHA := config/check.ov_SC05_003.sha ov_SC05_003_SYMBOLS := config/symbols.ov_SC05_003.txt ov_SC05_003_SIG := .run/sig.ov_SC05_003.jsonl @@ -2243,7 +2243,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.o,tail2.data.o,ov_SC05_004_after.o,tail3.data.o,ov_SC05_004_jr_8015AE2C.o,tail4.data.o,ov_SC05_004_jr_8016AB6C.o,tail5.data.o,ov_SC05_004_jr_801734BC.o,tail6.data.o,ov_SC05_004_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_004_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_004.o,tail2.data.o,ov_SC05_004_jr_8015444C.o,tail3.data.o,ov_SC05_004_jr_8015A3C8.o,tail4.data.o,ov_SC05_004_jr_8015AE2C.o,tail5.data.o,ov_SC05_004_jr_8016AB6C.o,tail6.data.o,ov_SC05_004_jr_801734BC.o,tail7.data.o,ov_SC05_004_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_004_CHECK_SHA := config/check.ov_SC05_004.sha ov_SC05_004_SYMBOLS := config/symbols.ov_SC05_004.txt ov_SC05_004_SIG := .run/sig.ov_SC05_004.jsonl @@ -2265,7 +2265,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_8013FFD8.o,tail3.data.o,ov_SC05_005_after.o,tail4.data.o,ov_SC05_005_jr_8015AE2C.o,tail5.data.o,ov_SC05_005_jr_8016AB6C.o,tail6.data.o,ov_SC05_005_jr_801734BC.o,tail7.data.o,ov_SC05_005_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_005_jr_8015444C.o,tail4.data.o,ov_SC05_005_jr_8015A3C8.o,tail5.data.o,ov_SC05_005_jr_8015AE2C.o,tail6.data.o,ov_SC05_005_jr_8016AB6C.o,tail7.data.o,ov_SC05_005_jr_801734BC.o,tail8.data.o,ov_SC05_005_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_005_CHECK_SHA := config/check.ov_SC05_005.sha ov_SC05_005_SYMBOLS := config/symbols.ov_SC05_005.txt ov_SC05_005_SIG := .run/sig.ov_SC05_005.jsonl @@ -2287,7 +2287,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_8013FFD8.o,tail3.data.o,ov_SC05_006_after.o,tail4.data.o,ov_SC05_006_jr_8015AE2C.o,tail5.data.o,ov_SC05_006_jr_8016AB6C.o,tail6.data.o,ov_SC05_006_jr_801734BC.o,tail7.data.o,ov_SC05_006_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_006_jr_8015444C.o,tail4.data.o,ov_SC05_006_jr_8015A3C8.o,tail5.data.o,ov_SC05_006_jr_8015AE2C.o,tail6.data.o,ov_SC05_006_jr_8016AB6C.o,tail7.data.o,ov_SC05_006_jr_801734BC.o,tail8.data.o,ov_SC05_006_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_006_CHECK_SHA := config/check.ov_SC05_006.sha ov_SC05_006_SYMBOLS := config/symbols.ov_SC05_006.txt ov_SC05_006_SIG := .run/sig.ov_SC05_006.jsonl @@ -2309,7 +2309,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_8013FFD8.o,tail3.data.o,ov_SC05_007_after.o,tail4.data.o,ov_SC05_007_jr_8015AE2C.o,tail5.data.o,ov_SC05_007_jr_8016AB6C.o,tail6.data.o,ov_SC05_007_jr_801734BC.o,tail7.data.o,ov_SC05_007_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_007_jr_8015444C.o,tail4.data.o,ov_SC05_007_jr_8015A3C8.o,tail5.data.o,ov_SC05_007_jr_8015AE2C.o,tail6.data.o,ov_SC05_007_jr_8016AB6C.o,tail7.data.o,ov_SC05_007_jr_801734BC.o,tail8.data.o,ov_SC05_007_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_007_CHECK_SHA := config/check.ov_SC05_007.sha ov_SC05_007_SYMBOLS := config/symbols.ov_SC05_007.txt ov_SC05_007_SIG := .run/sig.ov_SC05_007.jsonl @@ -2331,7 +2331,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_8013FFD8.o,tail3.data.o,ov_SC05_008_after.o,tail4.data.o,ov_SC05_008_jr_8015AE2C.o,tail5.data.o,ov_SC05_008_jr_8016AB6C.o,tail6.data.o,ov_SC05_008_jr_801734BC.o,tail7.data.o,ov_SC05_008_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_008_jr_8015444C.o,tail4.data.o,ov_SC05_008_jr_8015A3C8.o,tail5.data.o,ov_SC05_008_jr_8015AE2C.o,tail6.data.o,ov_SC05_008_jr_8016AB6C.o,tail7.data.o,ov_SC05_008_jr_801734BC.o,tail8.data.o,ov_SC05_008_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_008_CHECK_SHA := config/check.ov_SC05_008.sha ov_SC05_008_SYMBOLS := config/symbols.ov_SC05_008.txt ov_SC05_008_SIG := .run/sig.ov_SC05_008.jsonl @@ -2353,7 +2353,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_8013FFD8.o,tail3.data.o,ov_SC05_009_jr_8015AE2C.o,tail4.data.o,ov_SC05_009_jr_8016AB6C.o,tail5.data.o,ov_SC05_009_jr_801734BC.o,tail6.data.o,ov_SC05_009_jr_80178D40.o,tail7.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_8013FFD8.o,tail3.data.o,ov_SC05_009_after.o,tail4.data.o,ov_SC05_009_jr_8015AE2C.o,tail5.data.o,ov_SC05_009_jr_8016AB6C.o,tail6.data.o,ov_SC05_009_jr_801734BC.o,tail7.data.o,ov_SC05_009_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_009_CHECK_SHA := config/check.ov_SC05_009.sha ov_SC05_009_SYMBOLS := config/symbols.ov_SC05_009.txt ov_SC05_009_SIG := .run/sig.ov_SC05_009.jsonl @@ -2375,7 +2375,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_8013FFD8.o,tail3.data.o,ov_SC05_010_after.o,tail4.data.o,ov_SC05_010_jr_8015AE2C.o,tail5.data.o,ov_SC05_010_jr_8016AB6C.o,tail6.data.o,ov_SC05_010_jr_801734BC.o,tail7.data.o,ov_SC05_010_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_010_jr_8015444C.o,tail4.data.o,ov_SC05_010_jr_8015A3C8.o,tail5.data.o,ov_SC05_010_jr_8015AE2C.o,tail6.data.o,ov_SC05_010_jr_8016AB6C.o,tail7.data.o,ov_SC05_010_jr_801734BC.o,tail8.data.o,ov_SC05_010_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha ov_SC05_010_SYMBOLS := config/symbols.ov_SC05_010.txt ov_SC05_010_SIG := .run/sig.ov_SC05_010.jsonl @@ -2397,7 +2397,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_8013FFD8.o,tail3.data.o,ov_SC05_011_after.o,tail4.data.o,ov_SC05_011_jr_8015AE2C.o,tail5.data.o,ov_SC05_011_jr_8016AB6C.o,tail6.data.o,ov_SC05_011_jr_801734BC.o,tail7.data.o,ov_SC05_011_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_011_jr_8015444C.o,tail4.data.o,ov_SC05_011_jr_8015A3C8.o,tail5.data.o,ov_SC05_011_jr_8015AE2C.o,tail6.data.o,ov_SC05_011_jr_8016AB6C.o,tail7.data.o,ov_SC05_011_jr_801734BC.o,tail8.data.o,ov_SC05_011_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_011_CHECK_SHA := config/check.ov_SC05_011.sha ov_SC05_011_SYMBOLS := config/symbols.ov_SC05_011.txt ov_SC05_011_SIG := .run/sig.ov_SC05_011.jsonl @@ -2419,7 +2419,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_8013FFD8.o,tail3.data.o,ov_SC05_017_after.o,tail4.data.o,ov_SC05_017_jr_8015AE2C.o,tail5.data.o,ov_SC05_017_jr_8016AB6C.o,tail6.data.o,ov_SC05_017_jr_801734BC.o,tail7.data.o,ov_SC05_017_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_017_jr_8015444C.o,tail4.data.o,ov_SC05_017_jr_8015A3C8.o,tail5.data.o,ov_SC05_017_jr_8015AE2C.o,tail6.data.o,ov_SC05_017_jr_8016AB6C.o,tail7.data.o,ov_SC05_017_jr_801734BC.o,tail8.data.o,ov_SC05_017_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_017_CHECK_SHA := config/check.ov_SC05_017.sha ov_SC05_017_SYMBOLS := config/symbols.ov_SC05_017.txt ov_SC05_017_SIG := .run/sig.ov_SC05_017.jsonl @@ -2441,7 +2441,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_8013FFD8.o,tail3.data.o,ov_SC05_018_after.o,tail4.data.o,ov_SC05_018_jr_8015AE2C.o,tail5.data.o,ov_SC05_018_jr_8016AB6C.o,tail6.data.o,ov_SC05_018_jr_801734BC.o,tail7.data.o,ov_SC05_018_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_018_jr_8015444C.o,tail4.data.o,ov_SC05_018_jr_8015A3C8.o,tail5.data.o,ov_SC05_018_jr_8015AE2C.o,tail6.data.o,ov_SC05_018_jr_8016AB6C.o,tail7.data.o,ov_SC05_018_jr_801734BC.o,tail8.data.o,ov_SC05_018_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_018_CHECK_SHA := config/check.ov_SC05_018.sha ov_SC05_018_SYMBOLS := config/symbols.ov_SC05_018.txt ov_SC05_018_SIG := .run/sig.ov_SC05_018.jsonl @@ -2463,7 +2463,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_8013FFD8.o,tail3.data.o,ov_SC05_019_after.o,tail4.data.o,ov_SC05_019_jr_8015AE2C.o,tail5.data.o,ov_SC05_019_jr_8016AB6C.o,tail6.data.o,ov_SC05_019_jr_801734BC.o,tail7.data.o,ov_SC05_019_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC05_019_jr_8015444C.o,tail4.data.o,ov_SC05_019_jr_8015A3C8.o,tail5.data.o,ov_SC05_019_jr_8015AE2C.o,tail6.data.o,ov_SC05_019_jr_8016AB6C.o,tail7.data.o,ov_SC05_019_jr_801734BC.o,tail8.data.o,ov_SC05_019_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC05_019_CHECK_SHA := config/check.ov_SC05_019.sha ov_SC05_019_SYMBOLS := config/symbols.ov_SC05_019.txt ov_SC05_019_SIG := .run/sig.ov_SC05_019.jsonl @@ -2485,7 +2485,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_8013FFD8.o,tail3.data.o,ov_SC06_006_after.o,tail4.data.o,ov_SC06_006_jr_8015AE2C.o,tail5.data.o,ov_SC06_006_jr_8016AB6C.o,tail6.data.o,ov_SC06_006_jr_801734BC.o,tail7.data.o,ov_SC06_006_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_006_jr_8015444C.o,tail4.data.o,ov_SC06_006_jr_8015A3C8.o,tail5.data.o,ov_SC06_006_jr_8015AE2C.o,tail6.data.o,ov_SC06_006_jr_8016AB6C.o,tail7.data.o,ov_SC06_006_jr_801734BC.o,tail8.data.o,ov_SC06_006_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_006_CHECK_SHA := config/check.ov_SC06_006.sha ov_SC06_006_SYMBOLS := config/symbols.ov_SC06_006.txt ov_SC06_006_SIG := .run/sig.ov_SC06_006.jsonl @@ -2507,7 +2507,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_8013FFD8.o,tail3.data.o,ov_SC06_008_after.o,tail4.data.o,ov_SC06_008_jr_8015AE2C.o,tail5.data.o,ov_SC06_008_jr_8016AB6C.o,tail6.data.o,ov_SC06_008_jr_801734BC.o,tail7.data.o,ov_SC06_008_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_008_jr_8015444C.o,tail4.data.o,ov_SC06_008_jr_8015A3C8.o,tail5.data.o,ov_SC06_008_jr_8015AE2C.o,tail6.data.o,ov_SC06_008_jr_8016AB6C.o,tail7.data.o,ov_SC06_008_jr_801734BC.o,tail8.data.o,ov_SC06_008_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_008_CHECK_SHA := config/check.ov_SC06_008.sha ov_SC06_008_SYMBOLS := config/symbols.ov_SC06_008.txt ov_SC06_008_SIG := .run/sig.ov_SC06_008.jsonl @@ -2529,7 +2529,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.o,tail2.data.o,ov_SC06_010_after.o,tail3.data.o,ov_SC06_010_jr_8015AE2C.o,tail4.data.o,ov_SC06_010_jr_8016AB6C.o,tail5.data.o,ov_SC06_010_jr_801734BC.o,tail6.data.o,ov_SC06_010_jr_80178D40.o,tail7.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC06_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_010.o,tail2.data.o,ov_SC06_010_jr_8015444C.o,tail3.data.o,ov_SC06_010_jr_8015A3C8.o,tail4.data.o,ov_SC06_010_jr_8015AE2C.o,tail5.data.o,ov_SC06_010_jr_8016AB6C.o,tail6.data.o,ov_SC06_010_jr_801734BC.o,tail7.data.o,ov_SC06_010_jr_80178D40.o,tail8.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_010_CHECK_SHA := config/check.ov_SC06_010.sha ov_SC06_010_SYMBOLS := config/symbols.ov_SC06_010.txt ov_SC06_010_SIG := .run/sig.ov_SC06_010.jsonl @@ -2551,7 +2551,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_8013FFD8.o,tail3.data.o,ov_SC06_011_after.o,tail4.data.o,ov_SC06_011_jr_8015AE2C.o,tail5.data.o,ov_SC06_011_jr_8016AB6C.o,tail6.data.o,ov_SC06_011_jr_801734BC.o,tail7.data.o,ov_SC06_011_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_011_jr_8015444C.o,tail4.data.o,ov_SC06_011_jr_8015A3C8.o,tail5.data.o,ov_SC06_011_jr_8015AE2C.o,tail6.data.o,ov_SC06_011_jr_8016AB6C.o,tail7.data.o,ov_SC06_011_jr_801734BC.o,tail8.data.o,ov_SC06_011_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_011_CHECK_SHA := config/check.ov_SC06_011.sha ov_SC06_011_SYMBOLS := config/symbols.ov_SC06_011.txt ov_SC06_011_SIG := .run/sig.ov_SC06_011.jsonl @@ -2573,7 +2573,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_8013FFD8.o,tail3.data.o,ov_SC06_013_after.o,tail4.data.o,ov_SC06_013_jr_8015AE2C.o,tail5.data.o,ov_SC06_013_jr_8016AB6C.o,tail6.data.o,ov_SC06_013_jr_801734BC.o,tail7.data.o,ov_SC06_013_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_013_jr_8015444C.o,tail4.data.o,ov_SC06_013_jr_8015A3C8.o,tail5.data.o,ov_SC06_013_jr_8015AE2C.o,tail6.data.o,ov_SC06_013_jr_8016AB6C.o,tail7.data.o,ov_SC06_013_jr_801734BC.o,tail8.data.o,ov_SC06_013_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_013_CHECK_SHA := config/check.ov_SC06_013.sha ov_SC06_013_SYMBOLS := config/symbols.ov_SC06_013.txt ov_SC06_013_SIG := .run/sig.ov_SC06_013.jsonl @@ -2595,7 +2595,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_8013FFD8.o,tail3.data.o,ov_SC06_014_after.o,tail4.data.o,ov_SC06_014_jr_8015AE2C.o,tail5.data.o,ov_SC06_014_jr_8016AB6C.o,tail6.data.o,ov_SC06_014_jr_801734BC.o,tail7.data.o,ov_SC06_014_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_014_jr_8015444C.o,tail4.data.o,ov_SC06_014_jr_8015A3C8.o,tail5.data.o,ov_SC06_014_jr_8015AE2C.o,tail6.data.o,ov_SC06_014_jr_8016AB6C.o,tail7.data.o,ov_SC06_014_jr_801734BC.o,tail8.data.o,ov_SC06_014_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_014_CHECK_SHA := config/check.ov_SC06_014.sha ov_SC06_014_SYMBOLS := config/symbols.ov_SC06_014.txt ov_SC06_014_SIG := .run/sig.ov_SC06_014.jsonl @@ -2617,7 +2617,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_8013FFD8.o,tail3.data.o,ov_SC06_015_after.o,tail4.data.o,ov_SC06_015_jr_8015AE2C.o,tail5.data.o,ov_SC06_015_jr_8016AB6C.o,tail6.data.o,ov_SC06_015_jr_801734BC.o,tail7.data.o,ov_SC06_015_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_015_jr_8015444C.o,tail4.data.o,ov_SC06_015_jr_8015A3C8.o,tail5.data.o,ov_SC06_015_jr_8015AE2C.o,tail6.data.o,ov_SC06_015_jr_8016AB6C.o,tail7.data.o,ov_SC06_015_jr_801734BC.o,tail8.data.o,ov_SC06_015_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_015_CHECK_SHA := config/check.ov_SC06_015.sha ov_SC06_015_SYMBOLS := config/symbols.ov_SC06_015.txt ov_SC06_015_SIG := .run/sig.ov_SC06_015.jsonl @@ -2639,7 +2639,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_8013FFD8.o,tail3.data.o,ov_SC06_016_after.o,tail4.data.o,ov_SC06_016_jr_8015AE2C.o,tail5.data.o,ov_SC06_016_jr_8016AB6C.o,tail6.data.o,ov_SC06_016_jr_801734BC.o,tail7.data.o,ov_SC06_016_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_016_jr_8015444C.o,tail4.data.o,ov_SC06_016_jr_8015A3C8.o,tail5.data.o,ov_SC06_016_jr_8015AE2C.o,tail6.data.o,ov_SC06_016_jr_8016AB6C.o,tail7.data.o,ov_SC06_016_jr_801734BC.o,tail8.data.o,ov_SC06_016_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_016_CHECK_SHA := config/check.ov_SC06_016.sha ov_SC06_016_SYMBOLS := config/symbols.ov_SC06_016.txt ov_SC06_016_SIG := .run/sig.ov_SC06_016.jsonl @@ -2661,7 +2661,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_8013FFD8.o,tail3.data.o,ov_SC06_018_after.o,tail4.data.o,ov_SC06_018_jr_8015AE2C.o,tail5.data.o,ov_SC06_018_jr_8016AB6C.o,tail6.data.o,ov_SC06_018_jr_801734BC.o,tail7.data.o,ov_SC06_018_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_018_jr_8015444C.o,tail4.data.o,ov_SC06_018_jr_8015A3C8.o,tail5.data.o,ov_SC06_018_jr_8015AE2C.o,tail6.data.o,ov_SC06_018_jr_8016AB6C.o,tail7.data.o,ov_SC06_018_jr_801734BC.o,tail8.data.o,ov_SC06_018_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_018_CHECK_SHA := config/check.ov_SC06_018.sha ov_SC06_018_SYMBOLS := config/symbols.ov_SC06_018.txt ov_SC06_018_SIG := .run/sig.ov_SC06_018.jsonl @@ -2683,7 +2683,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_8013FFD8.o,tail3.data.o,ov_SC06_020_after.o,tail4.data.o,ov_SC06_020_jr_8015AE2C.o,tail5.data.o,ov_SC06_020_jr_8016AB6C.o,tail6.data.o,ov_SC06_020_jr_801734BC.o,tail7.data.o,ov_SC06_020_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_020_jr_8015444C.o,tail4.data.o,ov_SC06_020_jr_8015A3C8.o,tail5.data.o,ov_SC06_020_jr_8015AE2C.o,tail6.data.o,ov_SC06_020_jr_8016AB6C.o,tail7.data.o,ov_SC06_020_jr_801734BC.o,tail8.data.o,ov_SC06_020_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_020_CHECK_SHA := config/check.ov_SC06_020.sha ov_SC06_020_SYMBOLS := config/symbols.ov_SC06_020.txt ov_SC06_020_SIG := .run/sig.ov_SC06_020.jsonl @@ -2705,7 +2705,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_8013FFD8.o,tail3.data.o,ov_SC06_022_after.o,tail4.data.o,ov_SC06_022_jr_8015AE2C.o,tail5.data.o,ov_SC06_022_jr_8016AB6C.o,tail6.data.o,ov_SC06_022_jr_801734BC.o,tail7.data.o,ov_SC06_022_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_022_jr_8015444C.o,tail4.data.o,ov_SC06_022_jr_8015A3C8.o,tail5.data.o,ov_SC06_022_jr_8015AE2C.o,tail6.data.o,ov_SC06_022_jr_8016AB6C.o,tail7.data.o,ov_SC06_022_jr_801734BC.o,tail8.data.o,ov_SC06_022_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_022_CHECK_SHA := config/check.ov_SC06_022.sha ov_SC06_022_SYMBOLS := config/symbols.ov_SC06_022.txt ov_SC06_022_SIG := .run/sig.ov_SC06_022.jsonl @@ -2727,7 +2727,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_8013FFD8.o,tail3.data.o,ov_SC06_024_after.o,tail4.data.o,ov_SC06_024_jr_8015AE2C.o,tail5.data.o,ov_SC06_024_jr_8016AB6C.o,tail6.data.o,ov_SC06_024_jr_801734BC.o,tail7.data.o,ov_SC06_024_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_024_jr_8015444C.o,tail4.data.o,ov_SC06_024_jr_8015A3C8.o,tail5.data.o,ov_SC06_024_jr_8015AE2C.o,tail6.data.o,ov_SC06_024_jr_8016AB6C.o,tail7.data.o,ov_SC06_024_jr_801734BC.o,tail8.data.o,ov_SC06_024_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_024_CHECK_SHA := config/check.ov_SC06_024.sha ov_SC06_024_SYMBOLS := config/symbols.ov_SC06_024.txt ov_SC06_024_SIG := .run/sig.ov_SC06_024.jsonl @@ -2749,7 +2749,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_8013FFD8.o,tail3.data.o,ov_SC06_025_after.o,tail4.data.o,ov_SC06_025_jr_8015AE2C.o,tail5.data.o,ov_SC06_025_jr_8016AB6C.o,tail6.data.o,ov_SC06_025_jr_801734BC.o,tail7.data.o,ov_SC06_025_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_025_jr_8015444C.o,tail4.data.o,ov_SC06_025_jr_8015A3C8.o,tail5.data.o,ov_SC06_025_jr_8015AE2C.o,tail6.data.o,ov_SC06_025_jr_8016AB6C.o,tail7.data.o,ov_SC06_025_jr_801734BC.o,tail8.data.o,ov_SC06_025_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_025_CHECK_SHA := config/check.ov_SC06_025.sha ov_SC06_025_SYMBOLS := config/symbols.ov_SC06_025.txt ov_SC06_025_SIG := .run/sig.ov_SC06_025.jsonl @@ -2771,7 +2771,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_8013FFD8.o,tail3.data.o,ov_SC06_027_after.o,tail4.data.o,ov_SC06_027_jr_8015AE2C.o,tail5.data.o,ov_SC06_027_jr_8016AB6C.o,tail6.data.o,ov_SC06_027_jr_801734BC.o,tail7.data.o,ov_SC06_027_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_027_jr_8015444C.o,tail4.data.o,ov_SC06_027_jr_8015A3C8.o,tail5.data.o,ov_SC06_027_jr_8015AE2C.o,tail6.data.o,ov_SC06_027_jr_8016AB6C.o,tail7.data.o,ov_SC06_027_jr_801734BC.o,tail8.data.o,ov_SC06_027_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_027_CHECK_SHA := config/check.ov_SC06_027.sha ov_SC06_027_SYMBOLS := config/symbols.ov_SC06_027.txt ov_SC06_027_SIG := .run/sig.ov_SC06_027.jsonl @@ -2793,7 +2793,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_8013FFD8.o,tail3.data.o,ov_SC06_029_after.o,tail4.data.o,ov_SC06_029_jr_8015AE2C.o,tail5.data.o,ov_SC06_029_jr_8016AB6C.o,tail6.data.o,ov_SC06_029_jr_801734BC.o,tail7.data.o,ov_SC06_029_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_029_jr_8015444C.o,tail4.data.o,ov_SC06_029_jr_8015A3C8.o,tail5.data.o,ov_SC06_029_jr_8015AE2C.o,tail6.data.o,ov_SC06_029_jr_8016AB6C.o,tail7.data.o,ov_SC06_029_jr_801734BC.o,tail8.data.o,ov_SC06_029_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_029_CHECK_SHA := config/check.ov_SC06_029.sha ov_SC06_029_SYMBOLS := config/symbols.ov_SC06_029.txt ov_SC06_029_SIG := .run/sig.ov_SC06_029.jsonl @@ -2815,7 +2815,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_8013FFD8.o,tail3.data.o,ov_SC06_030_after.o,tail4.data.o,ov_SC06_030_jr_8015AE2C.o,tail5.data.o,ov_SC06_030_jr_8016AB6C.o,tail6.data.o,ov_SC06_030_jr_801734BC.o,tail7.data.o,ov_SC06_030_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_030_jr_8015444C.o,tail4.data.o,ov_SC06_030_jr_8015A3C8.o,tail5.data.o,ov_SC06_030_jr_8015AE2C.o,tail6.data.o,ov_SC06_030_jr_8016AB6C.o,tail7.data.o,ov_SC06_030_jr_801734BC.o,tail8.data.o,ov_SC06_030_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_030_CHECK_SHA := config/check.ov_SC06_030.sha ov_SC06_030_SYMBOLS := config/symbols.ov_SC06_030.txt ov_SC06_030_SIG := .run/sig.ov_SC06_030.jsonl @@ -2837,7 +2837,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_8013FFD8.o,tail3.data.o,ov_SC06_032_after.o,tail4.data.o,ov_SC06_032_jr_8015AE2C.o,tail5.data.o,ov_SC06_032_jr_8016AB6C.o,tail6.data.o,ov_SC06_032_jr_801734BC.o,tail7.data.o,ov_SC06_032_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_032_jr_8015444C.o,tail4.data.o,ov_SC06_032_jr_8015A3C8.o,tail5.data.o,ov_SC06_032_jr_8015AE2C.o,tail6.data.o,ov_SC06_032_jr_8016AB6C.o,tail7.data.o,ov_SC06_032_jr_801734BC.o,tail8.data.o,ov_SC06_032_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_032_CHECK_SHA := config/check.ov_SC06_032.sha ov_SC06_032_SYMBOLS := config/symbols.ov_SC06_032.txt ov_SC06_032_SIG := .run/sig.ov_SC06_032.jsonl @@ -2859,7 +2859,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_8013FFD8.o,tail3.data.o,ov_SC06_033_after.o,tail4.data.o,ov_SC06_033_jr_8015AE2C.o,tail5.data.o,ov_SC06_033_jr_8016AB6C.o,tail6.data.o,ov_SC06_033_jr_801734BC.o,tail7.data.o,ov_SC06_033_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC06_033_jr_8015444C.o,tail4.data.o,ov_SC06_033_jr_8015A3C8.o,tail5.data.o,ov_SC06_033_jr_8015AE2C.o,tail6.data.o,ov_SC06_033_jr_8016AB6C.o,tail7.data.o,ov_SC06_033_jr_801734BC.o,tail8.data.o,ov_SC06_033_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC06_033_CHECK_SHA := config/check.ov_SC06_033.sha ov_SC06_033_SYMBOLS := config/symbols.ov_SC06_033.txt ov_SC06_033_SIG := .run/sig.ov_SC06_033.jsonl @@ -2881,7 +2881,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_8013FFD8.o,tail3.data.o,ov_SC07_001_after.o,tail4.data.o,ov_SC07_001_jr_8015AE2C.o,tail5.data.o,ov_SC07_001_jr_8016AB6C.o,tail6.data.o,ov_SC07_001_jr_801734BC.o,tail7.data.o,ov_SC07_001_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC07_001_jr_8015444C.o,tail4.data.o,ov_SC07_001_jr_8015A3C8.o,tail5.data.o,ov_SC07_001_jr_8015AE2C.o,tail6.data.o,ov_SC07_001_jr_8016AB6C.o,tail7.data.o,ov_SC07_001_jr_801734BC.o,tail8.data.o,ov_SC07_001_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_001_CHECK_SHA := config/check.ov_SC07_001.sha ov_SC07_001_SYMBOLS := config/symbols.ov_SC07_001.txt ov_SC07_001_SIG := .run/sig.ov_SC07_001.jsonl @@ -2903,7 +2903,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_8013FFD8.o,tail3.data.o,ov_SC07_002_after.o,tail4.data.o,ov_SC07_002_jr_8015AE2C.o,tail5.data.o,ov_SC07_002_jr_8016AB6C.o,tail6.data.o,ov_SC07_002_jr_801734BC.o,tail7.data.o,ov_SC07_002_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC07_002_jr_8015444C.o,tail4.data.o,ov_SC07_002_jr_8015A3C8.o,tail5.data.o,ov_SC07_002_jr_8015AE2C.o,tail6.data.o,ov_SC07_002_jr_8016AB6C.o,tail7.data.o,ov_SC07_002_jr_801734BC.o,tail8.data.o,ov_SC07_002_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_002_CHECK_SHA := config/check.ov_SC07_002.sha ov_SC07_002_SYMBOLS := config/symbols.ov_SC07_002.txt ov_SC07_002_SIG := .run/sig.ov_SC07_002.jsonl @@ -2925,7 +2925,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_8013FFD8.o,tail3.data.o,ov_SC07_008_after.o,tail4.data.o,ov_SC07_008_jr_8015AE2C.o,tail5.data.o,ov_SC07_008_jr_8016AB6C.o,tail6.data.o,ov_SC07_008_jr_801734BC.o,tail7.data.o,ov_SC07_008_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC07_008_jr_8015444C.o,tail4.data.o,ov_SC07_008_jr_8015A3C8.o,tail5.data.o,ov_SC07_008_jr_8015AE2C.o,tail6.data.o,ov_SC07_008_jr_8016AB6C.o,tail7.data.o,ov_SC07_008_jr_801734BC.o,tail8.data.o,ov_SC07_008_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_008_CHECK_SHA := config/check.ov_SC07_008.sha ov_SC07_008_SYMBOLS := config/symbols.ov_SC07_008.txt ov_SC07_008_SIG := .run/sig.ov_SC07_008.jsonl @@ -2947,7 +2947,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_8013FFD8.o,tail3.data.o,ov_SC07_009_after.o,tail4.data.o,ov_SC07_009_jr_8015AE2C.o,tail5.data.o,ov_SC07_009_jr_8016AB6C.o,tail6.data.o,ov_SC07_009_jr_801734BC.o,tail7.data.o,ov_SC07_009_jr_80178D40.o,tail8.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_8013FFD8.o,tail3.data.o,ov_SC07_009_jr_8015444C.o,tail4.data.o,ov_SC07_009_jr_8015A3C8.o,tail5.data.o,ov_SC07_009_jr_8015AE2C.o,tail6.data.o,ov_SC07_009_jr_8016AB6C.o,tail7.data.o,ov_SC07_009_jr_801734BC.o,tail8.data.o,ov_SC07_009_jr_80178D40.o,tail9.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve ov_SC07_009_CHECK_SHA := config/check.ov_SC07_009.sha ov_SC07_009_SYMBOLS := config/symbols.ov_SC07_009.txt ov_SC07_009_SIG := .run/sig.ov_SC07_009.jsonl diff --git a/config/splat.ov_SC01_000.yaml b/config/splat.ov_SC01_000.yaml index 1e122b789..33b5751b0 100644 --- a/config/splat.ov_SC01_000.yaml +++ b/config/splat.ov_SC01_000.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_000_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_000_jr_8015A3C8] - [0x32cd4, c, ov_SC01_000_jr_8015AE2C] - [0x42a14, c, ov_SC01_000_jr_8016AB6C] - [0x4b364, c, ov_SC01_000_jr_801734BC] @@ -108,18 +110,20 @@ segments: - [0x7b290, data, tail2] - [0x7b9e4, .rodata, ov_SC01_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7ba18, data, tail3] - - [0x7bc80, .rodata, ov_SC01_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bc9c, data, tail4] + - [0x7ba80, .rodata, ov_SC01_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7baec, data, tail4] + - [0x7bc80, .rodata, ov_SC01_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bc9c, data, tail5] - [0x7bca0, .rodata, ov_SC01_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bcbc, data, tail5] + - [0x7bcbc, data, tail6] - [0x7bd14, .rodata, ov_SC01_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bd34, data, tail6] + - [0x7bd34, data, tail7] - [0x7bdb4, .rodata, ov_SC01_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bdc8, data, tail7] + - [0x7bdc8, data, tail8] - [0x7bf70, .rodata, ov_SC01_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c0e8, data, tail8] + - [0x7c0e8, data, tail9] - [0x7c21c, .rodata, ov_SC01_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c23c, data, tail9] + - [0x7c23c, data, tail10] - [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 803f3b493..bdb687a4f 100644 --- a/config/splat.ov_SC01_001.yaml +++ b/config/splat.ov_SC01_001.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_001_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_001_jr_8015A3C8] - [0x32cd4, c, ov_SC01_001_jr_8015AE2C] - [0x42a14, c, ov_SC01_001_jr_8016AB6C] - [0x4b364, c, ov_SC01_001_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc3368, data, tail2] - [0xc3abc, .rodata, ov_SC01_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc3af0, data, tail3] - - [0xc3d58, .rodata, ov_SC01_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d74, data, tail4] + - [0xc3b58, .rodata, ov_SC01_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3bc4, data, tail4] + - [0xc3d58, .rodata, ov_SC01_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc3d74, data, tail5] - [0xc3d78, .rodata, ov_SC01_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3d94, data, tail5] + - [0xc3d94, data, tail6] - [0xc3dec, .rodata, ov_SC01_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3e0c, data, tail6] + - [0xc3e0c, data, tail7] - [0xc3e8c, .rodata, ov_SC01_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3ea0, data, tail7] + - [0xc3ea0, data, tail8] - [0xc4048, .rodata, ov_SC01_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc41c0, data, tail8] + - [0xc41c0, data, tail9] - [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 a96d02af8..b852c4440 100644 --- a/config/splat.ov_SC01_004.yaml +++ b/config/splat.ov_SC01_004.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_004_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_004_jr_8015A3C8] - [0x32cd4, c, ov_SC01_004_jr_8015AE2C] - [0x42a14, c, ov_SC01_004_jr_8016AB6C] - [0x4b364, c, ov_SC01_004_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65748, data, tail2] - [0x65e9c, .rodata, ov_SC01_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65ed0, data, tail3] - - [0x66138, .rodata, ov_SC01_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66154, data, tail4] + - [0x65f38, .rodata, ov_SC01_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65fa4, data, tail4] + - [0x66138, .rodata, ov_SC01_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66154, data, tail5] - [0x66158, .rodata, ov_SC01_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66174, data, tail5] + - [0x66174, data, tail6] - [0x661cc, .rodata, ov_SC01_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x661ec, data, tail6] + - [0x661ec, data, tail7] - [0x6626c, .rodata, ov_SC01_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66280, data, tail7] + - [0x66280, data, tail8] - [0x66428, .rodata, ov_SC01_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x665a0, data, tail8] + - [0x665a0, data, tail9] - [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 c0c2f5ede..b83fbc688 100644 --- a/config/splat.ov_SC01_005.yaml +++ b/config/splat.ov_SC01_005.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_005_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_005_jr_8015A3C8] - [0x32cd4, c, ov_SC01_005_jr_8015AE2C] - [0x42a14, c, ov_SC01_005_jr_8016AB6C] - [0x4b364, c, ov_SC01_005_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa2ea8, data, tail2] - [0xa35fc, .rodata, ov_SC01_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3630, data, tail3] - - [0xa3898, .rodata, ov_SC01_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38b4, data, tail4] + - [0xa3698, .rodata, ov_SC01_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3704, data, tail4] + - [0xa3898, .rodata, ov_SC01_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa38b4, data, tail5] - [0xa38b8, .rodata, ov_SC01_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail5] + - [0xa38d4, data, tail6] - [0xa392c, .rodata, ov_SC01_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa394c, data, tail6] + - [0xa394c, data, tail7] - [0xa39cc, .rodata, ov_SC01_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail7] + - [0xa39e0, data, tail8] - [0xa3b88, .rodata, ov_SC01_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail8] + - [0xa3d00, data, tail9] - [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 30da180e2..234794222 100644 --- a/config/splat.ov_SC01_006.yaml +++ b/config/splat.ov_SC01_006.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_006_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_006_jr_8015A3C8] - [0x32cd4, c, ov_SC01_006_jr_8015AE2C] - [0x42a14, c, ov_SC01_006_jr_8016AB6C] - [0x4b364, c, ov_SC01_006_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa2ea8, data, tail2] - [0xa35fc, .rodata, ov_SC01_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa3630, data, tail3] - - [0xa3898, .rodata, ov_SC01_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38b4, data, tail4] + - [0xa3698, .rodata, ov_SC01_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa3704, data, tail4] + - [0xa3898, .rodata, ov_SC01_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa38b4, data, tail5] - [0xa38b8, .rodata, ov_SC01_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa38d4, data, tail5] + - [0xa38d4, data, tail6] - [0xa392c, .rodata, ov_SC01_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa394c, data, tail6] + - [0xa394c, data, tail7] - [0xa39cc, .rodata, ov_SC01_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa39e0, data, tail7] + - [0xa39e0, data, tail8] - [0xa3b88, .rodata, ov_SC01_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa3d00, data, tail8] + - [0xa3d00, data, tail9] - [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 146707b05..522ff7ef8 100644 --- a/config/splat.ov_SC01_008.yaml +++ b/config/splat.ov_SC01_008.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_008_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_008_jr_8015A3C8] - [0x32cd4, c, ov_SC01_008_jr_8015AE2C] - [0x42a14, c, ov_SC01_008_jr_8016AB6C] - [0x4b364, c, ov_SC01_008_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x78958, data, tail2] - [0x790ac, .rodata, ov_SC01_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x790e0, data, tail3] - - [0x79348, .rodata, ov_SC01_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79364, data, tail4] + - [0x79148, .rodata, ov_SC01_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x791b4, data, tail4] + - [0x79348, .rodata, ov_SC01_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x79364, data, tail5] - [0x79368, .rodata, ov_SC01_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79384, data, tail5] + - [0x79384, data, tail6] - [0x793dc, .rodata, ov_SC01_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x793fc, data, tail6] + - [0x793fc, data, tail7] - [0x7947c, .rodata, ov_SC01_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x79490, data, tail7] + - [0x79490, data, tail8] - [0x79638, .rodata, ov_SC01_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x797b0, data, tail8] + - [0x797b0, data, tail9] - [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 d762eaa6f..11280eabc 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_009_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_009_jr_8015A3C8] - [0x32cd4, c, ov_SC01_009_jr_8015AE2C] - [0x42a14, c, ov_SC01_009_jr_8016AB6C] - [0x4b364, c, ov_SC01_009_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc871c, data, tail2] - [0xc8e70, .rodata, ov_SC01_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc8ea4, data, tail3] - - [0xc910c, .rodata, ov_SC01_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9128, data, tail4] + - [0xc8f0c, .rodata, ov_SC01_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc8f78, data, tail4] + - [0xc910c, .rodata, ov_SC01_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc9128, data, tail5] - [0xc912c, .rodata, ov_SC01_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9148, data, tail5] + - [0xc9148, data, tail6] - [0xc91a0, .rodata, ov_SC01_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc91c0, data, tail6] + - [0xc91c0, data, tail7] - [0xc9240, .rodata, ov_SC01_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9254, data, tail7] + - [0xc9254, data, tail8] - [0xc93fc, .rodata, ov_SC01_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9574, data, tail8] + - [0xc9574, data, tail9] - [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 62274cbef..5e4aa48c9 100644 --- a/config/splat.ov_SC01_074.yaml +++ b/config/splat.ov_SC01_074.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_074_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_074_jr_8015A3C8] - [0x32cd4, c, ov_SC01_074_jr_8015AE2C] - [0x42a14, c, ov_SC01_074_jr_8016AB6C] - [0x4b364, c, ov_SC01_074_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x717ac, data, tail2] - [0x71f00, .rodata, ov_SC01_074_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71f34, data, tail3] - - [0x7219c, .rodata, ov_SC01_074_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721b8, data, tail4] + - [0x71f9c, .rodata, ov_SC01_074_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x72008, data, tail4] + - [0x7219c, .rodata, ov_SC01_074_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x721b8, data, tail5] - [0x721bc, .rodata, ov_SC01_074_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x721d8, data, tail5] + - [0x721d8, data, tail6] - [0x72230, .rodata, ov_SC01_074_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72250, data, tail6] + - [0x72250, data, tail7] - [0x722d0, .rodata, ov_SC01_074_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722e4, data, tail7] + - [0x722e4, data, tail8] - [0x7248c, .rodata, ov_SC01_074_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72604, data, tail8] + - [0x72604, data, tail9] - [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_080.yaml b/config/splat.ov_SC01_080.yaml index b436aedab..9a390c5b8 100644 --- a/config/splat.ov_SC01_080.yaml +++ b/config/splat.ov_SC01_080.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_080_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_080_jr_8015A3C8] - [0x32cd4, c, ov_SC01_080_jr_8015AE2C] - [0x42a14, c, ov_SC01_080_jr_8016AB6C] - [0x4b364, c, ov_SC01_080_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9b5cc, data, tail2] - [0x9bd20, .rodata, ov_SC01_080_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9bd54, data, tail3] - - [0x9bfbc, .rodata, ov_SC01_080_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bfd8, data, tail4] + - [0x9bdbc, .rodata, ov_SC01_080_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9be28, data, tail4] + - [0x9bfbc, .rodata, ov_SC01_080_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9bfd8, data, tail5] - [0x9bfdc, .rodata, ov_SC01_080_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bff8, data, tail5] + - [0x9bff8, data, tail6] - [0x9c050, .rodata, ov_SC01_080_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c070, data, tail6] + - [0x9c070, data, tail7] - [0x9c0f0, .rodata, ov_SC01_080_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c104, data, tail7] + - [0x9c104, data, tail8] - [0x9c2ac, .rodata, ov_SC01_080_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c424, data, tail8] + - [0x9c424, data, tail9] - [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 1c1f50906..882d728cb 100644 --- a/config/splat.ov_SC01_084.yaml +++ b/config/splat.ov_SC01_084.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC01_084_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC01_084_jr_8015A3C8] - [0x32cd4, c, ov_SC01_084_jr_8015AE2C] - [0x42a14, c, ov_SC01_084_jr_8016AB6C] - [0x4b364, c, ov_SC01_084_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9cf9c, data, tail2] - [0x9d6f0, .rodata, ov_SC01_084_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d724, data, tail3] - - [0x9d98c, .rodata, ov_SC01_084_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d9a8, data, tail4] + - [0x9d78c, .rodata, ov_SC01_084_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d7f8, data, tail4] + - [0x9d98c, .rodata, ov_SC01_084_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d9a8, data, tail5] - [0x9d9ac, .rodata, ov_SC01_084_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d9c8, data, tail5] + - [0x9d9c8, data, tail6] - [0x9da20, .rodata, ov_SC01_084_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9da40, data, tail6] + - [0x9da40, data, tail7] - [0x9dac0, .rodata, ov_SC01_084_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9dad4, data, tail7] + - [0x9dad4, data, tail8] - [0x9dc7c, .rodata, ov_SC01_084_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ddf4, data, tail8] + - [0x9ddf4, data, tail9] - [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 1c976781b..a09c3b75c 100644 --- a/config/splat.ov_SC02_000.yaml +++ b/config/splat.ov_SC02_000.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_000_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_000_jr_8015A3C8] - [0x32cd4, c, ov_SC02_000_jr_8015AE2C] - [0x42a14, c, ov_SC02_000_jr_8016AB6C] - [0x4b364, c, ov_SC02_000_jr_801734BC] @@ -108,18 +110,20 @@ segments: - [0xbd7f0, data, tail2] - [0xbdf44, .rodata, ov_SC02_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbdf78, data, tail3] - - [0xbe1e0, .rodata, ov_SC02_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1fc, data, tail4] + - [0xbdfe0, .rodata, ov_SC02_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe04c, data, tail4] + - [0xbe1e0, .rodata, ov_SC02_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe1fc, data, tail5] - [0xbe200, .rodata, ov_SC02_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail5] + - [0xbe21c, data, tail6] - [0xbe274, .rodata, ov_SC02_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe294, data, tail6] + - [0xbe294, data, tail7] - [0xbe314, .rodata, ov_SC02_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail7] + - [0xbe328, data, tail8] - [0xbe4d0, .rodata, ov_SC02_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail8] + - [0xbe648, data, tail9] - [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail9] + - [0xbe964, data, tail10] - [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 3a4d5cfa8..9d456d1d9 100644 --- a/config/splat.ov_SC02_003.yaml +++ b/config/splat.ov_SC02_003.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_003_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_003_jr_8015A3C8] - [0x32cd4, c, ov_SC02_003_jr_8015AE2C] - [0x42a14, c, ov_SC02_003_jr_8016AB6C] - [0x4b364, c, ov_SC02_003_jr_801734BC] @@ -108,18 +110,20 @@ segments: - [0xbd7f0, data, tail2] - [0xbdf44, .rodata, ov_SC02_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbdf78, data, tail3] - - [0xbe1e0, .rodata, ov_SC02_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe1fc, data, tail4] + - [0xbdfe0, .rodata, ov_SC02_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe04c, data, tail4] + - [0xbe1e0, .rodata, ov_SC02_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbe1fc, data, tail5] - [0xbe200, .rodata, ov_SC02_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe21c, data, tail5] + - [0xbe21c, data, tail6] - [0xbe274, .rodata, ov_SC02_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe294, data, tail6] + - [0xbe294, data, tail7] - [0xbe314, .rodata, ov_SC02_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe328, data, tail7] + - [0xbe328, data, tail8] - [0xbe4d0, .rodata, ov_SC02_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe648, data, tail8] + - [0xbe648, data, tail9] - [0xbe944, .rodata, ov_SC02_003_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbe964, data, tail9] + - [0xbe964, data, tail10] - [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 47f92b538..e07ef255e 100644 --- a/config/splat.ov_SC02_004.yaml +++ b/config/splat.ov_SC02_004.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_004_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_004_jr_8015A3C8] - [0x32cd4, c, ov_SC02_004_jr_8015AE2C] - [0x42a14, c, ov_SC02_004_jr_8016AB6C] - [0x4b364, c, ov_SC02_004_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6be00, data, tail2] - [0x6c554, .rodata, ov_SC02_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c588, data, tail3] - - [0x6c7f0, .rodata, ov_SC02_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c80c, data, tail4] + - [0x6c5f0, .rodata, ov_SC02_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c65c, data, tail4] + - [0x6c7f0, .rodata, ov_SC02_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c80c, data, tail5] - [0x6c810, .rodata, ov_SC02_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c82c, data, tail5] + - [0x6c82c, data, tail6] - [0x6c884, .rodata, ov_SC02_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c8a4, data, tail6] + - [0x6c8a4, data, tail7] - [0x6c924, .rodata, ov_SC02_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6c938, data, tail7] + - [0x6c938, data, tail8] - [0x6cae0, .rodata, ov_SC02_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc58, data, tail8] + - [0x6cc58, data, tail9] - [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 8d44a5de0..69d7cac2e 100644 --- a/config/splat.ov_SC02_005.yaml +++ b/config/splat.ov_SC02_005.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_005_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_005_jr_8015A3C8] - [0x32cd4, c, ov_SC02_005_jr_8015AE2C] - [0x42a14, c, ov_SC02_005_jr_8016AB6C] - [0x4b364, c, ov_SC02_005_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xb9b34, data, tail2] - [0xba288, .rodata, ov_SC02_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xba2bc, data, tail3] - - [0xba524, .rodata, ov_SC02_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba540, data, tail4] + - [0xba324, .rodata, ov_SC02_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba390, data, tail4] + - [0xba524, .rodata, ov_SC02_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xba540, data, tail5] - [0xba544, .rodata, ov_SC02_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba560, data, tail5] + - [0xba560, data, tail6] - [0xba5b8, .rodata, ov_SC02_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba5d8, data, tail6] + - [0xba5d8, data, tail7] - [0xba658, .rodata, ov_SC02_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba66c, data, tail7] + - [0xba66c, data, tail8] - [0xba814, .rodata, ov_SC02_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xba98c, data, tail8] + - [0xba98c, data, tail9] - [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 40a3ac027..d626cf380 100644 --- a/config/splat.ov_SC02_011.yaml +++ b/config/splat.ov_SC02_011.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_011_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_011_jr_8015A3C8] - [0x32cd4, c, ov_SC02_011_jr_8015AE2C] - [0x42a14, c, ov_SC02_011_jr_8016AB6C] - [0x4b364, c, ov_SC02_011_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc0c90, data, tail2] - [0xc13e4, .rodata, ov_SC02_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc1418, data, tail3] - - [0xc1680, .rodata, ov_SC02_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc169c, data, tail4] + - [0xc1480, .rodata, ov_SC02_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc14ec, data, tail4] + - [0xc1680, .rodata, ov_SC02_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc169c, data, tail5] - [0xc16a0, .rodata, ov_SC02_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc16bc, data, tail5] + - [0xc16bc, data, tail6] - [0xc1714, .rodata, ov_SC02_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1734, data, tail6] + - [0xc1734, data, tail7] - [0xc17b4, .rodata, ov_SC02_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17c8, data, tail7] + - [0xc17c8, data, tail8] - [0xc1970, .rodata, ov_SC02_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1ae8, data, tail8] + - [0xc1ae8, data, tail9] - [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 e918c5f1b..0e285e6de 100644 --- a/config/splat.ov_SC02_015.yaml +++ b/config/splat.ov_SC02_015.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_015_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_015_jr_8015A3C8] - [0x32cd4, c, ov_SC02_015_jr_8015AE2C] - [0x42a14, c, ov_SC02_015_jr_8016AB6C] - [0x4b364, c, ov_SC02_015_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65ee8, data, tail2] - [0x6663c, .rodata, ov_SC02_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x66670, data, tail3] - - [0x668d8, .rodata, ov_SC02_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x668f4, data, tail4] + - [0x666d8, .rodata, ov_SC02_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66744, data, tail4] + - [0x668d8, .rodata, ov_SC02_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x668f4, data, tail5] - [0x668f8, .rodata, ov_SC02_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66914, data, tail5] + - [0x66914, data, tail6] - [0x6696c, .rodata, ov_SC02_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6698c, data, tail6] + - [0x6698c, data, tail7] - [0x66a0c, .rodata, ov_SC02_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66a20, data, tail7] + - [0x66a20, data, tail8] - [0x66bc8, .rodata, ov_SC02_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66d40, data, tail8] + - [0x66d40, data, tail9] - [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 0e1f80fe0..bb9609c3e 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_016_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_016_jr_8015A3C8] - [0x32cd4, c, ov_SC02_016_jr_8015AE2C] - [0x42a14, c, ov_SC02_016_jr_8016AB6C] - [0x4b364, c, ov_SC02_016_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x89ac8, data, tail2] - [0x8a21c, .rodata, ov_SC02_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8a250, data, tail3] - - [0x8a4b8, .rodata, ov_SC02_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4d4, data, tail4] + - [0x8a2b8, .rodata, ov_SC02_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a324, data, tail4] + - [0x8a4b8, .rodata, ov_SC02_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8a4d4, data, tail5] - [0x8a4d8, .rodata, ov_SC02_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a4f4, data, tail5] + - [0x8a4f4, data, tail6] - [0x8a54c, .rodata, ov_SC02_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a56c, data, tail6] + - [0x8a56c, data, tail7] - [0x8a5ec, .rodata, ov_SC02_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a600, data, tail7] + - [0x8a600, data, tail8] - [0x8a7a8, .rodata, ov_SC02_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a920, data, tail8] + - [0x8a920, data, tail9] - [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 cb02acc3f..5bb469534 100644 --- a/config/splat.ov_SC02_017.yaml +++ b/config/splat.ov_SC02_017.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_017_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_017_jr_8015A3C8] - [0x32cd4, c, ov_SC02_017_jr_8015AE2C] - [0x42a14, c, ov_SC02_017_jr_8016AB6C] - [0x4b364, c, ov_SC02_017_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc52e8, data, tail2] - [0xc5a3c, .rodata, ov_SC02_017_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc5a70, data, tail3] - - [0xc5cd8, .rodata, ov_SC02_017_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5cf4, data, tail4] + - [0xc5ad8, .rodata, ov_SC02_017_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5b44, data, tail4] + - [0xc5cd8, .rodata, ov_SC02_017_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc5cf4, data, tail5] - [0xc5cf8, .rodata, ov_SC02_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d14, data, tail5] + - [0xc5d14, data, tail6] - [0xc5d6c, .rodata, ov_SC02_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5d8c, data, tail6] + - [0xc5d8c, data, tail7] - [0xc5e0c, .rodata, ov_SC02_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5e20, data, tail7] + - [0xc5e20, data, tail8] - [0xc5fc8, .rodata, ov_SC02_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc6140, data, tail8] + - [0xc6140, data, tail9] - [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 0949171d3..23d433c12 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_021_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_021_jr_8015A3C8] - [0x32cd4, c, ov_SC02_021_jr_8015AE2C] - [0x42a14, c, ov_SC02_021_jr_8016AB6C] - [0x4b364, c, ov_SC02_021_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x68864, data, tail2] - [0x68fb8, .rodata, ov_SC02_021_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68fec, data, tail3] - - [0x69254, .rodata, ov_SC02_021_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69270, data, tail4] + - [0x69054, .rodata, ov_SC02_021_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x690c0, data, tail4] + - [0x69254, .rodata, ov_SC02_021_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x69270, data, tail5] - [0x69274, .rodata, ov_SC02_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69290, data, tail5] + - [0x69290, data, tail6] - [0x692e8, .rodata, ov_SC02_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x69308, data, tail6] + - [0x69308, data, tail7] - [0x69388, .rodata, ov_SC02_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6939c, data, tail7] + - [0x6939c, data, tail8] - [0x69544, .rodata, ov_SC02_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x696bc, data, tail8] + - [0x696bc, data, tail9] - [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 a0911f4ab..21d4566b2 100644 --- a/config/splat.ov_SC02_026.yaml +++ b/config/splat.ov_SC02_026.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_026_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_026_jr_8015A3C8] - [0x32cd4, c, ov_SC02_026_jr_8015AE2C] - [0x42a14, c, ov_SC02_026_jr_8016AB6C] - [0x4b364, c, ov_SC02_026_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa5c98, data, tail2] - [0xa63ec, .rodata, ov_SC02_026_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6420, data, tail3] - - [0xa6688, .rodata, ov_SC02_026_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa66a4, data, tail4] + - [0xa6488, .rodata, ov_SC02_026_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa64f4, data, tail4] + - [0xa6688, .rodata, ov_SC02_026_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa66a4, data, tail5] - [0xa66a8, .rodata, ov_SC02_026_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa66c4, data, tail5] + - [0xa66c4, data, tail6] - [0xa671c, .rodata, ov_SC02_026_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa673c, data, tail6] + - [0xa673c, data, tail7] - [0xa67bc, .rodata, ov_SC02_026_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa67d0, data, tail7] + - [0xa67d0, data, tail8] - [0xa6978, .rodata, ov_SC02_026_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6af0, data, tail8] + - [0xa6af0, data, tail9] - [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 5c9eb6bf0..cb17f4e40 100644 --- a/config/splat.ov_SC02_027.yaml +++ b/config/splat.ov_SC02_027.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_027_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_027_jr_8015A3C8] - [0x32cd4, c, ov_SC02_027_jr_8015AE2C] - [0x42a14, c, ov_SC02_027_jr_8016AB6C] - [0x4b364, c, ov_SC02_027_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xafa04, data, tail2] - [0xb0158, .rodata, ov_SC02_027_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb018c, data, tail3] - - [0xb03f4, .rodata, ov_SC02_027_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0410, data, tail4] + - [0xb01f4, .rodata, ov_SC02_027_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb0260, data, tail4] + - [0xb03f4, .rodata, ov_SC02_027_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb0410, data, tail5] - [0xb0414, .rodata, ov_SC02_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb0430, data, tail5] + - [0xb0430, data, tail6] - [0xb0488, .rodata, ov_SC02_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb04a8, data, tail6] + - [0xb04a8, data, tail7] - [0xb0528, .rodata, ov_SC02_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb053c, data, tail7] + - [0xb053c, data, tail8] - [0xb06e4, .rodata, ov_SC02_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb085c, data, tail8] + - [0xb085c, data, tail9] - [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 6f83f7921..c4bed3508 100644 --- a/config/splat.ov_SC02_028.yaml +++ b/config/splat.ov_SC02_028.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_028_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_028_jr_8015A3C8] - [0x32cd4, c, ov_SC02_028_jr_8015AE2C] - [0x42a14, c, ov_SC02_028_jr_8016AB6C] - [0x4b364, c, ov_SC02_028_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa8988, data, tail2] - [0xa90dc, .rodata, ov_SC02_028_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa9110, data, tail3] - - [0xa9378, .rodata, ov_SC02_028_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9394, data, tail4] + - [0xa9178, .rodata, ov_SC02_028_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa91e4, data, tail4] + - [0xa9378, .rodata, ov_SC02_028_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9394, data, tail5] - [0xa9398, .rodata, ov_SC02_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa93b4, data, tail5] + - [0xa93b4, data, tail6] - [0xa940c, .rodata, ov_SC02_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa942c, data, tail6] + - [0xa942c, data, tail7] - [0xa94ac, .rodata, ov_SC02_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa94c0, data, tail7] + - [0xa94c0, data, tail8] - [0xa9668, .rodata, ov_SC02_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97e0, data, tail8] + - [0xa97e0, data, tail9] - [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 6b6a46d9d..0c6482013 100644 --- a/config/splat.ov_SC02_031.yaml +++ b/config/splat.ov_SC02_031.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_031_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_031_jr_8015A3C8] - [0x32cd4, c, ov_SC02_031_jr_8015AE2C] - [0x42a14, c, ov_SC02_031_jr_8016AB6C] - [0x4b364, c, ov_SC02_031_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8d184, data, tail2] - [0x8d8d8, .rodata, ov_SC02_031_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8d90c, data, tail3] - - [0x8db74, .rodata, ov_SC02_031_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8db90, data, tail4] + - [0x8d974, .rodata, ov_SC02_031_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8d9e0, data, tail4] + - [0x8db74, .rodata, ov_SC02_031_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8db90, data, tail5] - [0x8db94, .rodata, ov_SC02_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dbb0, data, tail5] + - [0x8dbb0, data, tail6] - [0x8dc08, .rodata, ov_SC02_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dc28, data, tail6] + - [0x8dc28, data, tail7] - [0x8dca8, .rodata, ov_SC02_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dcbc, data, tail7] + - [0x8dcbc, data, tail8] - [0x8de64, .rodata, ov_SC02_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8dfdc, data, tail8] + - [0x8dfdc, data, tail9] - [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 bf80cce26..695d5f761 100644 --- a/config/splat.ov_SC02_035.yaml +++ b/config/splat.ov_SC02_035.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_035_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_035_jr_8015A3C8] - [0x32cd4, c, ov_SC02_035_jr_8015AE2C] - [0x42a14, c, ov_SC02_035_jr_8016AB6C] - [0x4b364, c, ov_SC02_035_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9444c, data, tail2] - [0x94ba0, .rodata, ov_SC02_035_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x94bd4, data, tail3] - - [0x94e3c, .rodata, ov_SC02_035_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e58, data, tail4] + - [0x94c3c, .rodata, ov_SC02_035_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x94ca8, data, tail4] + - [0x94e3c, .rodata, ov_SC02_035_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x94e58, data, tail5] - [0x94e5c, .rodata, ov_SC02_035_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94e78, data, tail5] + - [0x94e78, data, tail6] - [0x94ed0, .rodata, ov_SC02_035_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94ef0, data, tail6] + - [0x94ef0, data, tail7] - [0x94f70, .rodata, ov_SC02_035_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x94f84, data, tail7] + - [0x94f84, data, tail8] - [0x9512c, .rodata, ov_SC02_035_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x952a4, data, tail8] + - [0x952a4, data, tail9] - [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 b478c1071..e792ecf68 100644 --- a/config/splat.ov_SC02_039.yaml +++ b/config/splat.ov_SC02_039.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_039_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_039_jr_8015A3C8] - [0x32cd4, c, ov_SC02_039_jr_8015AE2C] - [0x42a14, c, ov_SC02_039_jr_8016AB6C] - [0x4b364, c, ov_SC02_039_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x76838, data, tail2] - [0x76f8c, .rodata, ov_SC02_039_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76fc0, data, tail3] - - [0x77228, .rodata, ov_SC02_039_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77244, data, tail4] + - [0x77028, .rodata, ov_SC02_039_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77094, data, tail4] + - [0x77228, .rodata, ov_SC02_039_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77244, data, tail5] - [0x77248, .rodata, ov_SC02_039_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77264, data, tail5] + - [0x77264, data, tail6] - [0x772bc, .rodata, ov_SC02_039_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x772dc, data, tail6] + - [0x772dc, data, tail7] - [0x7735c, .rodata, ov_SC02_039_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77370, data, tail7] + - [0x77370, data, tail8] - [0x77518, .rodata, ov_SC02_039_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77690, data, tail8] + - [0x77690, data, tail9] - [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 da4739c55..45aeeec0e 100644 --- a/config/splat.ov_SC02_041.yaml +++ b/config/splat.ov_SC02_041.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC02_041_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC02_041_jr_8015A3C8] - [0x32cd4, c, ov_SC02_041_jr_8015AE2C] - [0x42a14, c, ov_SC02_041_jr_8016AB6C] - [0x4b364, c, ov_SC02_041_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8eba4, data, tail2] - [0x8f2f8, .rodata, ov_SC02_041_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f32c, data, tail3] - - [0x8f594, .rodata, ov_SC02_041_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f5b0, data, tail4] + - [0x8f394, .rodata, ov_SC02_041_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f400, data, tail4] + - [0x8f594, .rodata, ov_SC02_041_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f5b0, data, tail5] - [0x8f5b4, .rodata, ov_SC02_041_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f5d0, data, tail5] + - [0x8f5d0, data, tail6] - [0x8f628, .rodata, ov_SC02_041_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f648, data, tail6] + - [0x8f648, data, tail7] - [0x8f6c8, .rodata, ov_SC02_041_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f6dc, data, tail7] + - [0x8f6dc, data, tail8] - [0x8f884, .rodata, ov_SC02_041_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f9fc, data, tail8] + - [0x8f9fc, data, tail9] - [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 f1b7f16d2..ee9eed121 100644 --- a/config/splat.ov_SC03_001.yaml +++ b/config/splat.ov_SC03_001.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_001_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_001_jr_8015A3C8] - [0x32cd4, c, ov_SC03_001_jr_8015AE2C] - [0x42a14, c, ov_SC03_001_jr_8016AB6C] - [0x4b364, c, ov_SC03_001_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc3cc4, data, tail2] - [0xc4418, .rodata, ov_SC03_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc444c, data, tail3] - - [0xc46b4, .rodata, ov_SC03_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46d0, data, tail4] + - [0xc44b4, .rodata, ov_SC03_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc4520, data, tail4] + - [0xc46b4, .rodata, ov_SC03_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc46d0, data, tail5] - [0xc46d4, .rodata, ov_SC03_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc46f0, data, tail5] + - [0xc46f0, data, tail6] - [0xc4748, .rodata, ov_SC03_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4768, data, tail6] + - [0xc4768, data, tail7] - [0xc47e8, .rodata, ov_SC03_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc47fc, data, tail7] + - [0xc47fc, data, tail8] - [0xc49a4, .rodata, ov_SC03_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc4b1c, data, tail8] + - [0xc4b1c, data, tail9] - [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 fb0262e24..c53d73afe 100644 --- a/config/splat.ov_SC03_002.yaml +++ b/config/splat.ov_SC03_002.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_002_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_002_jr_8015A3C8] - [0x32cd4, c, ov_SC03_002_jr_8015AE2C] - [0x42a14, c, ov_SC03_002_jr_8016AB6C] - [0x4b364, c, ov_SC03_002_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa1220, data, tail2] - [0xa1974, .rodata, ov_SC03_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa19a8, data, tail3] - - [0xa1c10, .rodata, ov_SC03_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c2c, data, tail4] + - [0xa1a10, .rodata, ov_SC03_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1a7c, data, tail4] + - [0xa1c10, .rodata, ov_SC03_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1c2c, data, tail5] - [0xa1c30, .rodata, ov_SC03_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1c4c, data, tail5] + - [0xa1c4c, data, tail6] - [0xa1ca4, .rodata, ov_SC03_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1cc4, data, tail6] + - [0xa1cc4, data, tail7] - [0xa1d44, .rodata, ov_SC03_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa1d58, data, tail7] + - [0xa1d58, data, tail8] - [0xa1f00, .rodata, ov_SC03_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2078, data, tail8] + - [0xa2078, data, tail9] - [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 3d9223027..66d1f109d 100644 --- a/config/splat.ov_SC03_003.yaml +++ b/config/splat.ov_SC03_003.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_003_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_003_jr_8015A3C8] - [0x32cd4, c, ov_SC03_003_jr_8015AE2C] - [0x42a14, c, ov_SC03_003_jr_8016AB6C] - [0x4b364, c, ov_SC03_003_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x655a0, data, tail2] - [0x65cf4, .rodata, ov_SC03_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65d28, data, tail3] - - [0x65f90, .rodata, ov_SC03_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fac, data, tail4] + - [0x65d90, .rodata, ov_SC03_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65dfc, data, tail4] + - [0x65f90, .rodata, ov_SC03_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65fac, data, tail5] - [0x65fb0, .rodata, ov_SC03_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fcc, data, tail5] + - [0x65fcc, data, tail6] - [0x66024, .rodata, ov_SC03_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66044, data, tail6] + - [0x66044, data, tail7] - [0x660c4, .rodata, ov_SC03_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x660d8, data, tail7] + - [0x660d8, data, tail8] - [0x66280, .rodata, ov_SC03_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663f8, data, tail8] + - [0x663f8, data, tail9] - [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 a24af7588..2f83a6fe0 100644 --- a/config/splat.ov_SC03_006.yaml +++ b/config/splat.ov_SC03_006.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_006_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_006_jr_8015A3C8] - [0x32cd4, c, ov_SC03_006_jr_8015AE2C] - [0x42a14, c, ov_SC03_006_jr_8016AB6C] - [0x4b364, c, ov_SC03_006_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xcce5c, data, tail2] - [0xcd5b0, .rodata, ov_SC03_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcd5e4, data, tail3] - - [0xcd84c, .rodata, ov_SC03_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd868, data, tail4] + - [0xcd64c, .rodata, ov_SC03_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcd6b8, data, tail4] + - [0xcd84c, .rodata, ov_SC03_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xcd868, data, tail5] - [0xcd86c, .rodata, ov_SC03_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd888, data, tail5] + - [0xcd888, data, tail6] - [0xcd8e0, .rodata, ov_SC03_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd900, data, tail6] + - [0xcd900, data, tail7] - [0xcd980, .rodata, ov_SC03_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcd994, data, tail7] + - [0xcd994, data, tail8] - [0xcdb3c, .rodata, ov_SC03_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xcdcb4, data, tail8] + - [0xcdcb4, data, tail9] - [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 9f7002697..67e5a1937 100644 --- a/config/splat.ov_SC03_007.yaml +++ b/config/splat.ov_SC03_007.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_007_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_007_jr_8015A3C8] - [0x32cd4, c, ov_SC03_007_jr_8015AE2C] - [0x42a14, c, ov_SC03_007_jr_8016AB6C] - [0x4b364, c, ov_SC03_007_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xbf7e4, data, tail2] - [0xbff38, .rodata, ov_SC03_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbff6c, data, tail3] - - [0xc01d4, .rodata, ov_SC03_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc01f0, data, tail4] + - [0xbffd4, .rodata, ov_SC03_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0040, data, tail4] + - [0xc01d4, .rodata, ov_SC03_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc01f0, data, tail5] - [0xc01f4, .rodata, ov_SC03_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0210, data, tail5] + - [0xc0210, data, tail6] - [0xc0268, .rodata, ov_SC03_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0288, data, tail6] + - [0xc0288, data, tail7] - [0xc0308, .rodata, ov_SC03_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc031c, data, tail7] + - [0xc031c, data, tail8] - [0xc04c4, .rodata, ov_SC03_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc063c, data, tail8] + - [0xc063c, data, tail9] - [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 211e3b6f5..27196aa28 100644 --- a/config/splat.ov_SC03_010.yaml +++ b/config/splat.ov_SC03_010.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_010_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_010_jr_8015A3C8] - [0x32cd4, c, ov_SC03_010_jr_8015AE2C] - [0x42a14, c, ov_SC03_010_jr_8016AB6C] - [0x4b364, c, ov_SC03_010_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x75ac0, data, tail2] - [0x76214, .rodata, ov_SC03_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x76248, data, tail3] - - [0x764b0, .rodata, ov_SC03_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764cc, data, tail4] + - [0x762b0, .rodata, ov_SC03_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7631c, data, tail4] + - [0x764b0, .rodata, ov_SC03_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x764cc, data, tail5] - [0x764d0, .rodata, ov_SC03_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764ec, data, tail5] + - [0x764ec, data, tail6] - [0x76544, .rodata, ov_SC03_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76564, data, tail6] + - [0x76564, data, tail7] - [0x765e4, .rodata, ov_SC03_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x765f8, data, tail7] + - [0x765f8, data, tail8] - [0x767a0, .rodata, ov_SC03_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76918, data, tail8] + - [0x76918, data, tail9] - [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 dea076d83..ced3dcb90 100644 --- a/config/splat.ov_SC03_011.yaml +++ b/config/splat.ov_SC03_011.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC03_011] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC03_011_jr_8015A3C8] - [0x32cd4, c, ov_SC03_011_jr_8015AE2C] - [0x42a14, c, ov_SC03_011_jr_8016AB6C] - [0x4b364, c, ov_SC03_011_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x590c4, data, tail] - [0x77c64, .rodata, ov_SC03_011] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77d30, data, tail2] - - [0x78720, .rodata, ov_SC03_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7873c, data, tail3] + - [0x78520, .rodata, ov_SC03_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7858c, data, tail3] + - [0x78720, .rodata, ov_SC03_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7873c, data, tail4] - [0x78740, .rodata, ov_SC03_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7875c, data, tail4] + - [0x7875c, data, tail5] - [0x787b4, .rodata, ov_SC03_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x787d4, data, tail5] + - [0x787d4, data, tail6] - [0x78854, .rodata, ov_SC03_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78868, data, tail6] + - [0x78868, data, tail7] - [0x78a10, .rodata, ov_SC03_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78b88, data, tail7] + - [0x78b88, data, tail8] - [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 40b4d906d..554bc962a 100644 --- a/config/splat.ov_SC03_012.yaml +++ b/config/splat.ov_SC03_012.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_012_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_012_jr_8015A3C8] - [0x32cd4, c, ov_SC03_012_jr_8015AE2C] - [0x42a14, c, ov_SC03_012_jr_8016AB6C] - [0x4b364, c, ov_SC03_012_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6ab8c, data, tail2] - [0x6b2e0, .rodata, ov_SC03_012_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b314, data, tail3] - - [0x6b57c, .rodata, ov_SC03_012_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b598, data, tail4] + - [0x6b37c, .rodata, ov_SC03_012_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b3e8, data, tail4] + - [0x6b57c, .rodata, ov_SC03_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b598, data, tail5] - [0x6b59c, .rodata, ov_SC03_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b8, data, tail5] + - [0x6b5b8, data, tail6] - [0x6b610, .rodata, ov_SC03_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b630, data, tail6] + - [0x6b630, data, tail7] - [0x6b6b0, .rodata, ov_SC03_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c4, data, tail7] + - [0x6b6c4, data, tail8] - [0x6b86c, .rodata, ov_SC03_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e4, data, tail8] + - [0x6b9e4, data, tail9] - [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 2d6cc36de..55bb92919 100644 --- a/config/splat.ov_SC03_013.yaml +++ b/config/splat.ov_SC03_013.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_013_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_013_jr_8015A3C8] - [0x32cd4, c, ov_SC03_013_jr_8015AE2C] - [0x42a14, c, ov_SC03_013_jr_8016AB6C] - [0x4b364, c, ov_SC03_013_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x82e24, data, tail2] - [0x83578, .rodata, ov_SC03_013_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x835ac, data, tail3] - - [0x83814, .rodata, ov_SC03_013_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83830, data, tail4] + - [0x83614, .rodata, ov_SC03_013_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83680, data, tail4] + - [0x83814, .rodata, ov_SC03_013_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x83830, data, tail5] - [0x83834, .rodata, ov_SC03_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83850, data, tail5] + - [0x83850, data, tail6] - [0x838a8, .rodata, ov_SC03_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x838c8, data, tail6] + - [0x838c8, data, tail7] - [0x83948, .rodata, ov_SC03_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8395c, data, tail7] + - [0x8395c, data, tail8] - [0x83b04, .rodata, ov_SC03_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83c7c, data, tail8] + - [0x83c7c, data, tail9] - [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 a581432d0..6eed6d4ea 100644 --- a/config/splat.ov_SC03_014.yaml +++ b/config/splat.ov_SC03_014.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_014_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_014_jr_8015A3C8] - [0x32cd4, c, ov_SC03_014_jr_8015AE2C] - [0x42a14, c, ov_SC03_014_jr_8016AB6C] - [0x4b364, c, ov_SC03_014_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc01f8, data, tail2] - [0xc094c, .rodata, ov_SC03_014_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0980, data, tail3] - - [0xc0be8, .rodata, ov_SC03_014_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c04, data, tail4] + - [0xc09e8, .rodata, ov_SC03_014_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0a54, data, tail4] + - [0xc0be8, .rodata, ov_SC03_014_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c04, data, tail5] - [0xc0c08, .rodata, ov_SC03_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail5] + - [0xc0c24, data, tail6] - [0xc0c7c, .rodata, ov_SC03_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c9c, data, tail6] + - [0xc0c9c, data, tail7] - [0xc0d1c, .rodata, ov_SC03_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail7] + - [0xc0d30, data, tail8] - [0xc0ed8, .rodata, ov_SC03_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail8] + - [0xc1050, data, tail9] - [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 5146ac5a9..90b39f9bb 100644 --- a/config/splat.ov_SC03_015.yaml +++ b/config/splat.ov_SC03_015.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_015_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_015_jr_8015A3C8] - [0x32cd4, c, ov_SC03_015_jr_8015AE2C] - [0x42a14, c, ov_SC03_015_jr_8016AB6C] - [0x4b364, c, ov_SC03_015_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc01f8, data, tail2] - [0xc094c, .rodata, ov_SC03_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc0980, data, tail3] - - [0xc0be8, .rodata, ov_SC03_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c04, data, tail4] + - [0xc09e8, .rodata, ov_SC03_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0a54, data, tail4] + - [0xc0be8, .rodata, ov_SC03_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc0c04, data, tail5] - [0xc0c08, .rodata, ov_SC03_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c24, data, tail5] + - [0xc0c24, data, tail6] - [0xc0c7c, .rodata, ov_SC03_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0c9c, data, tail6] + - [0xc0c9c, data, tail7] - [0xc0d1c, .rodata, ov_SC03_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc0d30, data, tail7] + - [0xc0d30, data, tail8] - [0xc0ed8, .rodata, ov_SC03_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1050, data, tail8] + - [0xc1050, data, tail9] - [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 1a8f1a25c..49685c9bd 100644 --- a/config/splat.ov_SC03_023.yaml +++ b/config/splat.ov_SC03_023.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_023_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_023_jr_8015A3C8] - [0x32cd4, c, ov_SC03_023_jr_8015AE2C] - [0x42a14, c, ov_SC03_023_jr_8016AB6C] - [0x4b364, c, ov_SC03_023_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6e7d0, data, tail2] - [0x6ef24, .rodata, ov_SC03_023_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ef58, data, tail3] - - [0x6f1c0, .rodata, ov_SC03_023_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1dc, data, tail4] + - [0x6efc0, .rodata, ov_SC03_023_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6f02c, data, tail4] + - [0x6f1c0, .rodata, ov_SC03_023_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6f1dc, data, tail5] - [0x6f1e0, .rodata, ov_SC03_023_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f1fc, data, tail5] + - [0x6f1fc, data, tail6] - [0x6f254, .rodata, ov_SC03_023_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f274, data, tail6] + - [0x6f274, data, tail7] - [0x6f2f4, .rodata, ov_SC03_023_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f308, data, tail7] + - [0x6f308, data, tail8] - [0x6f4b0, .rodata, ov_SC03_023_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6f628, data, tail8] + - [0x6f628, data, tail9] - [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 3871da70c..0bd8fbb22 100644 --- a/config/splat.ov_SC03_024.yaml +++ b/config/splat.ov_SC03_024.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_024_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_024_jr_8015A3C8] - [0x32cd4, c, ov_SC03_024_jr_8015AE2C] - [0x42a14, c, ov_SC03_024_jr_8016AB6C] - [0x4b364, c, ov_SC03_024_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x96c58, data, tail2] - [0x973ac, .rodata, ov_SC03_024_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x973e0, data, tail3] - - [0x97648, .rodata, ov_SC03_024_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97664, data, tail4] + - [0x97448, .rodata, ov_SC03_024_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x974b4, data, tail4] + - [0x97648, .rodata, ov_SC03_024_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97664, data, tail5] - [0x97668, .rodata, ov_SC03_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97684, data, tail5] + - [0x97684, data, tail6] - [0x976dc, .rodata, ov_SC03_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x976fc, data, tail6] + - [0x976fc, data, tail7] - [0x9777c, .rodata, ov_SC03_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97790, data, tail7] + - [0x97790, data, tail8] - [0x97938, .rodata, ov_SC03_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97ab0, data, tail8] + - [0x97ab0, data, tail9] - [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 7626ed1b1..a37fefc86 100644 --- a/config/splat.ov_SC03_028.yaml +++ b/config/splat.ov_SC03_028.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_028_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_028_jr_8015A3C8] - [0x32cd4, c, ov_SC03_028_jr_8015AE2C] - [0x42a14, c, ov_SC03_028_jr_8016AB6C] - [0x4b364, c, ov_SC03_028_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc0de0, data, tail2] - [0xc1534, .rodata, ov_SC03_028_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc1568, data, tail3] - - [0xc17d0, .rodata, ov_SC03_028_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc17ec, data, tail4] + - [0xc15d0, .rodata, ov_SC03_028_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc163c, data, tail4] + - [0xc17d0, .rodata, ov_SC03_028_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc17ec, data, tail5] - [0xc17f0, .rodata, ov_SC03_028_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc180c, data, tail5] + - [0xc180c, data, tail6] - [0xc1864, .rodata, ov_SC03_028_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1884, data, tail6] + - [0xc1884, data, tail7] - [0xc1904, .rodata, ov_SC03_028_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1918, data, tail7] + - [0xc1918, data, tail8] - [0xc1ac0, .rodata, ov_SC03_028_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc1c38, data, tail8] + - [0xc1c38, data, tail9] - [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 20c790920..e5c31a39b 100644 --- a/config/splat.ov_SC03_029.yaml +++ b/config/splat.ov_SC03_029.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_029_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_029_jr_8015A3C8] - [0x32cd4, c, ov_SC03_029_jr_8015AE2C] - [0x42a14, c, ov_SC03_029_jr_8016AB6C] - [0x4b364, c, ov_SC03_029_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xaef14, data, tail2] - [0xaf668, .rodata, ov_SC03_029_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaf69c, data, tail3] - - [0xaf904, .rodata, ov_SC03_029_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf920, data, tail4] + - [0xaf704, .rodata, ov_SC03_029_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaf770, data, tail4] + - [0xaf904, .rodata, ov_SC03_029_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaf920, data, tail5] - [0xaf924, .rodata, ov_SC03_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf940, data, tail5] + - [0xaf940, data, tail6] - [0xaf998, .rodata, ov_SC03_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaf9b8, data, tail6] + - [0xaf9b8, data, tail7] - [0xafa38, .rodata, ov_SC03_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafa4c, data, tail7] + - [0xafa4c, data, tail8] - [0xafbf4, .rodata, ov_SC03_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xafd6c, data, tail8] + - [0xafd6c, data, tail9] - [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 576aac69f..da9807168 100644 --- a/config/splat.ov_SC03_030.yaml +++ b/config/splat.ov_SC03_030.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC03_030] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC03_030_jr_8015A3C8] - [0x32cd4, c, ov_SC03_030_jr_8015AE2C] - [0x42a14, c, ov_SC03_030_jr_8016AB6C] - [0x4b364, c, ov_SC03_030_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x59ca8, data, tail] - [0xb74ec, .rodata, ov_SC03_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb75b8, data, tail2] - - [0xb7fa8, .rodata, ov_SC03_030_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fc4, data, tail3] + - [0xb7da8, .rodata, ov_SC03_030_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7e14, data, tail3] + - [0xb7fa8, .rodata, ov_SC03_030_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7fc4, data, tail4] - [0xb7fc8, .rodata, ov_SC03_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7fe4, data, tail4] + - [0xb7fe4, data, tail5] - [0xb803c, .rodata, ov_SC03_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb805c, data, tail5] + - [0xb805c, data, tail6] - [0xb80dc, .rodata, ov_SC03_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb80f0, data, tail6] + - [0xb80f0, data, tail7] - [0xb8298, .rodata, ov_SC03_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8410, data, tail7] + - [0xb8410, data, tail8] - [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 41e30bb2b..4478fad19 100644 --- a/config/splat.ov_SC03_031.yaml +++ b/config/splat.ov_SC03_031.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_031_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_031_jr_8015A3C8] - [0x32cd4, c, ov_SC03_031_jr_8015AE2C] - [0x42a14, c, ov_SC03_031_jr_8016AB6C] - [0x4b364, c, ov_SC03_031_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9ba5c, data, tail2] - [0x9c1b0, .rodata, ov_SC03_031_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c1e4, data, tail3] - - [0x9c44c, .rodata, ov_SC03_031_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c468, data, tail4] + - [0x9c24c, .rodata, ov_SC03_031_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c2b8, data, tail4] + - [0x9c44c, .rodata, ov_SC03_031_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9c468, data, tail5] - [0x9c46c, .rodata, ov_SC03_031_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c488, data, tail5] + - [0x9c488, data, tail6] - [0x9c4e0, .rodata, ov_SC03_031_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c500, data, tail6] + - [0x9c500, data, tail7] - [0x9c580, .rodata, ov_SC03_031_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c594, data, tail7] + - [0x9c594, data, tail8] - [0x9c73c, .rodata, ov_SC03_031_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9c8b4, data, tail8] + - [0x9c8b4, data, tail9] - [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 a185e88d9..630dc52c6 100644 --- a/config/splat.ov_SC03_089.yaml +++ b/config/splat.ov_SC03_089.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_089_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_089_jr_8015A3C8] - [0x32cd4, c, ov_SC03_089_jr_8015AE2C] - [0x42a14, c, ov_SC03_089_jr_8016AB6C] - [0x4b364, c, ov_SC03_089_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9c2c8, data, tail2] - [0x9ca1c, .rodata, ov_SC03_089_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ca50, data, tail3] - - [0x9ccb8, .rodata, ov_SC03_089_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccd4, data, tail4] + - [0x9cab8, .rodata, ov_SC03_089_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9cb24, data, tail4] + - [0x9ccb8, .rodata, ov_SC03_089_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ccd4, data, tail5] - [0x9ccd8, .rodata, ov_SC03_089_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ccf4, data, tail5] + - [0x9ccf4, data, tail6] - [0x9cd4c, .rodata, ov_SC03_089_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9cd6c, data, tail6] + - [0x9cd6c, data, tail7] - [0x9cdec, .rodata, ov_SC03_089_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ce00, data, tail7] + - [0x9ce00, data, tail8] - [0x9cfa8, .rodata, ov_SC03_089_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d120, data, tail8] + - [0x9d120, data, tail9] - [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 7d13b8960..e5e707f2a 100644 --- a/config/splat.ov_SC03_090.yaml +++ b/config/splat.ov_SC03_090.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_090_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_090_jr_8015A3C8] - [0x32cd4, c, ov_SC03_090_jr_8015AE2C] - [0x42a14, c, ov_SC03_090_jr_8016AB6C] - [0x4b364, c, ov_SC03_090_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa1734, data, tail2] - [0xa1e88, .rodata, ov_SC03_090_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa1ebc, data, tail3] - - [0xa2124, .rodata, ov_SC03_090_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2140, data, tail4] + - [0xa1f24, .rodata, ov_SC03_090_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa1f90, data, tail4] + - [0xa2124, .rodata, ov_SC03_090_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2140, data, tail5] - [0xa2144, .rodata, ov_SC03_090_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2160, data, tail5] + - [0xa2160, data, tail6] - [0xa21b8, .rodata, ov_SC03_090_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa21d8, data, tail6] + - [0xa21d8, data, tail7] - [0xa2258, .rodata, ov_SC03_090_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa226c, data, tail7] + - [0xa226c, data, tail8] - [0xa2414, .rodata, ov_SC03_090_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa258c, data, tail8] + - [0xa258c, data, tail9] - [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 e6c450915..78681f9bf 100644 --- a/config/splat.ov_SC03_091.yaml +++ b/config/splat.ov_SC03_091.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_091_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_091_jr_8015A3C8] - [0x32cd4, c, ov_SC03_091_jr_8015AE2C] - [0x42a14, c, ov_SC03_091_jr_8016AB6C] - [0x4b364, c, ov_SC03_091_jr_801734BC] @@ -108,16 +110,18 @@ segments: - [0xa7e00, data, tail2] - [0xa8554, .rodata, ov_SC03_091_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa8588, data, tail3] - - [0xa87f0, .rodata, ov_SC03_091_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa880c, data, tail4] + - [0xa85f0, .rodata, ov_SC03_091_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa865c, data, tail4] + - [0xa87f0, .rodata, ov_SC03_091_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa880c, data, tail5] - [0xa8810, .rodata, ov_SC03_091_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa882c, data, tail5] + - [0xa882c, data, tail6] - [0xa8884, .rodata, ov_SC03_091_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa88a4, data, tail6] + - [0xa88a4, data, tail7] - [0xa8924, .rodata, ov_SC03_091_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8938, data, tail7] + - [0xa8938, data, tail8] - [0xa8ae0, .rodata, ov_SC03_091_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa8c58, data, tail8] + - [0xa8c58, data, tail9] - [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 3096e3d56..b339d13df 100644 --- a/config/splat.ov_SC03_092.yaml +++ b/config/splat.ov_SC03_092.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_092_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_092_jr_8015A3C8] - [0x32cd4, c, ov_SC03_092_jr_8015AE2C] - [0x42a14, c, ov_SC03_092_jr_8016AB6C] - [0x4b364, c, ov_SC03_092_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x889d8, data, tail2] - [0x8912c, .rodata, ov_SC03_092_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89160, data, tail3] - - [0x893c8, .rodata, ov_SC03_092_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x893e4, data, tail4] + - [0x891c8, .rodata, ov_SC03_092_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89234, data, tail4] + - [0x893c8, .rodata, ov_SC03_092_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x893e4, data, tail5] - [0x893e8, .rodata, ov_SC03_092_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89404, data, tail5] + - [0x89404, data, tail6] - [0x8945c, .rodata, ov_SC03_092_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8947c, data, tail6] + - [0x8947c, data, tail7] - [0x894fc, .rodata, ov_SC03_092_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89510, data, tail7] + - [0x89510, data, tail8] - [0x896b8, .rodata, ov_SC03_092_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89830, data, tail8] + - [0x89830, data, tail9] - [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 48c3abf4c..fe5ae370a 100644 --- a/config/splat.ov_SC03_093.yaml +++ b/config/splat.ov_SC03_093.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_093_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_093_jr_8015A3C8] - [0x32cd4, c, ov_SC03_093_jr_8015AE2C] - [0x42a14, c, ov_SC03_093_jr_8016AB6C] - [0x4b364, c, ov_SC03_093_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa1e2c, data, tail2] - [0xa2580, .rodata, ov_SC03_093_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa25b4, data, tail3] - - [0xa281c, .rodata, ov_SC03_093_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2838, data, tail4] + - [0xa261c, .rodata, ov_SC03_093_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2688, data, tail4] + - [0xa281c, .rodata, ov_SC03_093_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa2838, data, tail5] - [0xa283c, .rodata, ov_SC03_093_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2858, data, tail5] + - [0xa2858, data, tail6] - [0xa28b0, .rodata, ov_SC03_093_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa28d0, data, tail6] + - [0xa28d0, data, tail7] - [0xa2950, .rodata, ov_SC03_093_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2964, data, tail7] + - [0xa2964, data, tail8] - [0xa2b0c, .rodata, ov_SC03_093_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa2c84, data, tail8] + - [0xa2c84, data, tail9] - [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 4d587de21..165eb0a15 100644 --- a/config/splat.ov_SC03_094.yaml +++ b/config/splat.ov_SC03_094.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_094_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_094_jr_8015A3C8] - [0x32cd4, c, ov_SC03_094_jr_8015AE2C] - [0x42a14, c, ov_SC03_094_jr_8016AB6C] - [0x4b364, c, ov_SC03_094_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa8c68, data, tail2] - [0xa93bc, .rodata, ov_SC03_094_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa93f0, data, tail3] - - [0xa9658, .rodata, ov_SC03_094_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9674, data, tail4] + - [0xa9458, .rodata, ov_SC03_094_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa94c4, data, tail4] + - [0xa9658, .rodata, ov_SC03_094_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa9674, data, tail5] - [0xa9678, .rodata, ov_SC03_094_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9694, data, tail5] + - [0xa9694, data, tail6] - [0xa96ec, .rodata, ov_SC03_094_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa970c, data, tail6] + - [0xa970c, data, tail7] - [0xa978c, .rodata, ov_SC03_094_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa97a0, data, tail7] + - [0xa97a0, data, tail8] - [0xa9948, .rodata, ov_SC03_094_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa9ac0, data, tail8] + - [0xa9ac0, data, tail9] - [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 a4203fdbb..d0207abde 100644 --- a/config/splat.ov_SC03_095.yaml +++ b/config/splat.ov_SC03_095.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_095_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_095_jr_8015A3C8] - [0x32cd4, c, ov_SC03_095_jr_8015AE2C] - [0x42a14, c, ov_SC03_095_jr_8016AB6C] - [0x4b364, c, ov_SC03_095_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x71894, data, tail2] - [0x71fe8, .rodata, ov_SC03_095_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7201c, data, tail3] - - [0x72284, .rodata, ov_SC03_095_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722a0, data, tail4] + - [0x72084, .rodata, ov_SC03_095_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x720f0, data, tail4] + - [0x72284, .rodata, ov_SC03_095_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x722a0, data, tail5] - [0x722a4, .rodata, ov_SC03_095_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x722c0, data, tail5] + - [0x722c0, data, tail6] - [0x72318, .rodata, ov_SC03_095_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72338, data, tail6] + - [0x72338, data, tail7] - [0x723b8, .rodata, ov_SC03_095_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723cc, data, tail7] + - [0x723cc, data, tail8] - [0x72574, .rodata, ov_SC03_095_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x726ec, data, tail8] + - [0x726ec, data, tail9] - [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 c82f1a72a..022fac46a 100644 --- a/config/splat.ov_SC03_096.yaml +++ b/config/splat.ov_SC03_096.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_096_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_096_jr_8015A3C8] - [0x32cd4, c, ov_SC03_096_jr_8015AE2C] - [0x42a14, c, ov_SC03_096_jr_8016AB6C] - [0x4b364, c, ov_SC03_096_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x70348, data, tail2] - [0x70a9c, .rodata, ov_SC03_096_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70ad0, data, tail3] - - [0x70d38, .rodata, ov_SC03_096_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail4] + - [0x70b38, .rodata, ov_SC03_096_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70ba4, data, tail4] + - [0x70d38, .rodata, ov_SC03_096_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70d54, data, tail5] - [0x70d58, .rodata, ov_SC03_096_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d74, data, tail5] + - [0x70d74, data, tail6] - [0x70dcc, .rodata, ov_SC03_096_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70dec, data, tail6] + - [0x70dec, data, tail7] - [0x70e6c, .rodata, ov_SC03_096_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70e80, data, tail7] + - [0x70e80, data, tail8] - [0x71028, .rodata, ov_SC03_096_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711a0, data, tail8] + - [0x711a0, data, tail9] - [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 c9bf9229c..5de473a25 100644 --- a/config/splat.ov_SC03_097.yaml +++ b/config/splat.ov_SC03_097.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_097_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_097_jr_8015A3C8] - [0x32cd4, c, ov_SC03_097_jr_8015AE2C] - [0x42a14, c, ov_SC03_097_jr_8016AB6C] - [0x4b364, c, ov_SC03_097_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x803b8, data, tail2] - [0x80b0c, .rodata, ov_SC03_097_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80b40, data, tail3] - - [0x80da8, .rodata, ov_SC03_097_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80dc4, data, tail4] + - [0x80ba8, .rodata, ov_SC03_097_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80c14, data, tail4] + - [0x80da8, .rodata, ov_SC03_097_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80dc4, data, tail5] - [0x80dc8, .rodata, ov_SC03_097_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80de4, data, tail5] + - [0x80de4, data, tail6] - [0x80e3c, .rodata, ov_SC03_097_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80e5c, data, tail6] + - [0x80e5c, data, tail7] - [0x80edc, .rodata, ov_SC03_097_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80ef0, data, tail7] + - [0x80ef0, data, tail8] - [0x81098, .rodata, ov_SC03_097_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81210, data, tail8] + - [0x81210, data, tail9] - [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 1a51d48e5..e17017d57 100644 --- a/config/splat.ov_SC03_098.yaml +++ b/config/splat.ov_SC03_098.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_098_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_098_jr_8015A3C8] - [0x32cd4, c, ov_SC03_098_jr_8015AE2C] - [0x42a14, c, ov_SC03_098_jr_8016AB6C] - [0x4b364, c, ov_SC03_098_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9b03c, data, tail2] - [0x9b790, .rodata, ov_SC03_098_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9b7c4, data, tail3] - - [0x9ba2c, .rodata, ov_SC03_098_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba48, data, tail4] + - [0x9b82c, .rodata, ov_SC03_098_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b898, data, tail4] + - [0x9ba2c, .rodata, ov_SC03_098_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ba48, data, tail5] - [0x9ba4c, .rodata, ov_SC03_098_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ba68, data, tail5] + - [0x9ba68, data, tail6] - [0x9bac0, .rodata, ov_SC03_098_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bae0, data, tail6] + - [0x9bae0, data, tail7] - [0x9bb60, .rodata, ov_SC03_098_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9bb74, data, tail7] + - [0x9bb74, data, tail8] - [0x9bd1c, .rodata, ov_SC03_098_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9be94, data, tail8] + - [0x9be94, data, tail9] - [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 f10318542..377b4eb71 100644 --- a/config/splat.ov_SC03_099.yaml +++ b/config/splat.ov_SC03_099.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_099_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_099_jr_8015A3C8] - [0x32cd4, c, ov_SC03_099_jr_8015AE2C] - [0x42a14, c, ov_SC03_099_jr_8016AB6C] - [0x4b364, c, ov_SC03_099_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x94d10, data, tail2] - [0x95464, .rodata, ov_SC03_099_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x95498, data, tail3] - - [0x95700, .rodata, ov_SC03_099_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9571c, data, tail4] + - [0x95500, .rodata, ov_SC03_099_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9556c, data, tail4] + - [0x95700, .rodata, ov_SC03_099_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9571c, data, tail5] - [0x95720, .rodata, ov_SC03_099_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9573c, data, tail5] + - [0x9573c, data, tail6] - [0x95794, .rodata, ov_SC03_099_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x957b4, data, tail6] + - [0x957b4, data, tail7] - [0x95834, .rodata, ov_SC03_099_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95848, data, tail7] + - [0x95848, data, tail8] - [0x959f0, .rodata, ov_SC03_099_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x95b68, data, tail8] + - [0x95b68, data, tail9] - [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 4a4f4bc3f..2654ec79d 100644 --- a/config/splat.ov_SC03_100.yaml +++ b/config/splat.ov_SC03_100.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_100_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_100_jr_8015A3C8] - [0x32cd4, c, ov_SC03_100_jr_8015AE2C] - [0x42a14, c, ov_SC03_100_jr_8016AB6C] - [0x4b364, c, ov_SC03_100_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9df94, data, tail2] - [0x9e6e8, .rodata, ov_SC03_100_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9e71c, data, tail3] - - [0x9e984, .rodata, ov_SC03_100_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e9a0, data, tail4] + - [0x9e784, .rodata, ov_SC03_100_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9e7f0, data, tail4] + - [0x9e984, .rodata, ov_SC03_100_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9e9a0, data, tail5] - [0x9e9a4, .rodata, ov_SC03_100_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9e9c0, data, tail5] + - [0x9e9c0, data, tail6] - [0x9ea18, .rodata, ov_SC03_100_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ea38, data, tail6] + - [0x9ea38, data, tail7] - [0x9eab8, .rodata, ov_SC03_100_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eacc, data, tail7] + - [0x9eacc, data, tail8] - [0x9ec74, .rodata, ov_SC03_100_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9edec, data, tail8] + - [0x9edec, data, tail9] - [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 ccabd026b..02c3feadf 100644 --- a/config/splat.ov_SC03_101.yaml +++ b/config/splat.ov_SC03_101.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_101_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_101_jr_8015A3C8] - [0x32cd4, c, ov_SC03_101_jr_8015AE2C] - [0x42a14, c, ov_SC03_101_jr_8016AB6C] - [0x4b364, c, ov_SC03_101_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7385c, data, tail2] - [0x73fb0, .rodata, ov_SC03_101_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73fe4, data, tail3] - - [0x7424c, .rodata, ov_SC03_101_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74268, data, tail4] + - [0x7404c, .rodata, ov_SC03_101_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x740b8, data, tail4] + - [0x7424c, .rodata, ov_SC03_101_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74268, data, tail5] - [0x7426c, .rodata, ov_SC03_101_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74288, data, tail5] + - [0x74288, data, tail6] - [0x742e0, .rodata, ov_SC03_101_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74300, data, tail6] + - [0x74300, data, tail7] - [0x74380, .rodata, ov_SC03_101_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74394, data, tail7] + - [0x74394, data, tail8] - [0x7453c, .rodata, ov_SC03_101_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x746b4, data, tail8] + - [0x746b4, data, tail9] - [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 ccf933d04..f4def8282 100644 --- a/config/splat.ov_SC03_102.yaml +++ b/config/splat.ov_SC03_102.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_102_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_102_jr_8015A3C8] - [0x32cd4, c, ov_SC03_102_jr_8015AE2C] - [0x42a14, c, ov_SC03_102_jr_8016AB6C] - [0x4b364, c, ov_SC03_102_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8f4d8, data, tail2] - [0x8fc2c, .rodata, ov_SC03_102_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8fc60, data, tail3] - - [0x8fec8, .rodata, ov_SC03_102_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fee4, data, tail4] + - [0x8fcc8, .rodata, ov_SC03_102_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fd34, data, tail4] + - [0x8fec8, .rodata, ov_SC03_102_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fee4, data, tail5] - [0x8fee8, .rodata, ov_SC03_102_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff04, data, tail5] + - [0x8ff04, data, tail6] - [0x8ff5c, .rodata, ov_SC03_102_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff7c, data, tail6] + - [0x8ff7c, data, tail7] - [0x8fffc, .rodata, ov_SC03_102_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90010, data, tail7] + - [0x90010, data, tail8] - [0x901b8, .rodata, ov_SC03_102_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90330, data, tail8] + - [0x90330, data, tail9] - [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 f6f48f02e..30cc3d73a 100644 --- a/config/splat.ov_SC03_103.yaml +++ b/config/splat.ov_SC03_103.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC03_103] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC03_103_jr_8015A3C8] - [0x32cd4, c, ov_SC03_103_jr_8015AE2C] - [0x42a14, c, ov_SC03_103_jr_8016AB6C] - [0x4b364, c, ov_SC03_103_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x5bf8c, data, tail] - [0x9a5c0, .rodata, ov_SC03_103] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a68c, data, tail2] - - [0x9b07c, .rodata, ov_SC03_103_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b098, data, tail3] + - [0x9ae7c, .rodata, ov_SC03_103_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9aee8, data, tail3] + - [0x9b07c, .rodata, ov_SC03_103_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9b098, data, tail4] - [0x9b09c, .rodata, ov_SC03_103_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b0b8, data, tail4] + - [0x9b0b8, data, tail5] - [0x9b110, .rodata, ov_SC03_103_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b130, data, tail5] + - [0x9b130, data, tail6] - [0x9b1b0, .rodata, ov_SC03_103_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b1c4, data, tail6] + - [0x9b1c4, data, tail7] - [0x9b36c, .rodata, ov_SC03_103_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9b4e4, data, tail7] + - [0x9b4e4, data, tail8] - [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 48f0da0d8..fcb0c6ef2 100644 --- a/config/splat.ov_SC03_104.yaml +++ b/config/splat.ov_SC03_104.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_104_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_104_jr_8015A3C8] - [0x32cd4, c, ov_SC03_104_jr_8015AE2C] - [0x42a14, c, ov_SC03_104_jr_8016AB6C] - [0x4b364, c, ov_SC03_104_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x95bec, data, tail2] - [0x96340, .rodata, ov_SC03_104_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x96374, data, tail3] - - [0x965dc, .rodata, ov_SC03_104_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x965f8, data, tail4] + - [0x963dc, .rodata, ov_SC03_104_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x96448, data, tail4] + - [0x965dc, .rodata, ov_SC03_104_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x965f8, data, tail5] - [0x965fc, .rodata, ov_SC03_104_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96618, data, tail5] + - [0x96618, data, tail6] - [0x96670, .rodata, ov_SC03_104_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96690, data, tail6] + - [0x96690, data, tail7] - [0x96710, .rodata, ov_SC03_104_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96724, data, tail7] + - [0x96724, data, tail8] - [0x968cc, .rodata, ov_SC03_104_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x96a44, data, tail8] + - [0x96a44, data, tail9] - [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 6cdb85757..e127b468c 100644 --- a/config/splat.ov_SC03_105.yaml +++ b/config/splat.ov_SC03_105.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_105_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_105_jr_8015A3C8] - [0x32cd4, c, ov_SC03_105_jr_8015AE2C] - [0x42a14, c, ov_SC03_105_jr_8016AB6C] - [0x4b364, c, ov_SC03_105_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8eee4, data, tail2] - [0x8f638, .rodata, ov_SC03_105_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f66c, data, tail3] - - [0x8f8d4, .rodata, ov_SC03_105_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f8f0, data, tail4] + - [0x8f6d4, .rodata, ov_SC03_105_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f740, data, tail4] + - [0x8f8d4, .rodata, ov_SC03_105_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f8f0, data, tail5] - [0x8f8f4, .rodata, ov_SC03_105_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f910, data, tail5] + - [0x8f910, data, tail6] - [0x8f968, .rodata, ov_SC03_105_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8f988, data, tail6] + - [0x8f988, data, tail7] - [0x8fa08, .rodata, ov_SC03_105_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fa1c, data, tail7] + - [0x8fa1c, data, tail8] - [0x8fbc4, .rodata, ov_SC03_105_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fd3c, data, tail8] + - [0x8fd3c, data, tail9] - [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 5b76cfd67..00d2e4b7d 100644 --- a/config/splat.ov_SC03_108.yaml +++ b/config/splat.ov_SC03_108.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_108_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_108_jr_8015A3C8] - [0x32cd4, c, ov_SC03_108_jr_8015AE2C] - [0x42a14, c, ov_SC03_108_jr_8016AB6C] - [0x4b364, c, ov_SC03_108_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x773ec, data, tail2] - [0x77b40, .rodata, ov_SC03_108_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x77b74, data, tail3] - - [0x77ddc, .rodata, ov_SC03_108_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77df8, data, tail4] + - [0x77bdc, .rodata, ov_SC03_108_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77c48, data, tail4] + - [0x77ddc, .rodata, ov_SC03_108_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77df8, data, tail5] - [0x77dfc, .rodata, ov_SC03_108_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e18, data, tail5] + - [0x77e18, data, tail6] - [0x77e70, .rodata, ov_SC03_108_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e90, data, tail6] + - [0x77e90, data, tail7] - [0x77f10, .rodata, ov_SC03_108_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77f24, data, tail7] + - [0x77f24, data, tail8] - [0x780cc, .rodata, ov_SC03_108_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x78244, data, tail8] + - [0x78244, data, tail9] - [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 d436d9e1b..1306300b4 100644 --- a/config/splat.ov_SC03_109.yaml +++ b/config/splat.ov_SC03_109.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_109_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_109_jr_8015A3C8] - [0x32cd4, c, ov_SC03_109_jr_8015AE2C] - [0x42a14, c, ov_SC03_109_jr_8016AB6C] - [0x4b364, c, ov_SC03_109_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6fefc, data, tail2] - [0x70650, .rodata, ov_SC03_109_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70684, data, tail3] - - [0x708ec, .rodata, ov_SC03_109_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70908, data, tail4] + - [0x706ec, .rodata, ov_SC03_109_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70758, data, tail4] + - [0x708ec, .rodata, ov_SC03_109_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70908, data, tail5] - [0x7090c, .rodata, ov_SC03_109_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70928, data, tail5] + - [0x70928, data, tail6] - [0x70980, .rodata, ov_SC03_109_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x709a0, data, tail6] + - [0x709a0, data, tail7] - [0x70a20, .rodata, ov_SC03_109_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70a34, data, tail7] + - [0x70a34, data, tail8] - [0x70bdc, .rodata, ov_SC03_109_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x70d54, data, tail8] + - [0x70d54, data, tail9] - [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 f15d3d706..798b30308 100644 --- a/config/splat.ov_SC03_110.yaml +++ b/config/splat.ov_SC03_110.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_110_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_110_jr_8015A3C8] - [0x32cd4, c, ov_SC03_110_jr_8015AE2C] - [0x42a14, c, ov_SC03_110_jr_8016AB6C] - [0x4b364, c, ov_SC03_110_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x77b98, data, tail2] - [0x782ec, .rodata, ov_SC03_110_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x78320, data, tail3] - - [0x78588, .rodata, ov_SC03_110_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x785a4, data, tail4] + - [0x78388, .rodata, ov_SC03_110_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x783f4, data, tail4] + - [0x78588, .rodata, ov_SC03_110_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x785a4, data, tail5] - [0x785a8, .rodata, ov_SC03_110_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x785c4, data, tail5] + - [0x785c4, data, tail6] - [0x7861c, .rodata, ov_SC03_110_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7863c, data, tail6] + - [0x7863c, data, tail7] - [0x786bc, .rodata, ov_SC03_110_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x786d0, data, tail7] + - [0x786d0, data, tail8] - [0x78878, .rodata, ov_SC03_110_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x789f0, data, tail8] + - [0x789f0, data, tail9] - [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 56733415a..ffe6a254b 100644 --- a/config/splat.ov_SC03_111.yaml +++ b/config/splat.ov_SC03_111.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_111_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_111_jr_8015A3C8] - [0x32cd4, c, ov_SC03_111_jr_8015AE2C] - [0x42a14, c, ov_SC03_111_jr_8016AB6C] - [0x4b364, c, ov_SC03_111_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8f118, data, tail2] - [0x8f86c, .rodata, ov_SC03_111_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f8a0, data, tail3] - - [0x8fb08, .rodata, ov_SC03_111_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb24, data, tail4] + - [0x8f908, .rodata, ov_SC03_111_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8f974, data, tail4] + - [0x8fb08, .rodata, ov_SC03_111_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8fb24, data, tail5] - [0x8fb28, .rodata, ov_SC03_111_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fb44, data, tail5] + - [0x8fb44, data, tail6] - [0x8fb9c, .rodata, ov_SC03_111_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fbbc, data, tail6] + - [0x8fbbc, data, tail7] - [0x8fc3c, .rodata, ov_SC03_111_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8fc50, data, tail7] + - [0x8fc50, data, tail8] - [0x8fdf8, .rodata, ov_SC03_111_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8ff70, data, tail8] + - [0x8ff70, data, tail9] - [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 12c79b174..3586ecf49 100644 --- a/config/splat.ov_SC03_112.yaml +++ b/config/splat.ov_SC03_112.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_112_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_112_jr_8015A3C8] - [0x32cd4, c, ov_SC03_112_jr_8015AE2C] - [0x42a14, c, ov_SC03_112_jr_8016AB6C] - [0x4b364, c, ov_SC03_112_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x82880, data, tail2] - [0x82fd4, .rodata, ov_SC03_112_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x83008, data, tail3] - - [0x83270, .rodata, ov_SC03_112_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8328c, data, tail4] + - [0x83070, .rodata, ov_SC03_112_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x830dc, data, tail4] + - [0x83270, .rodata, ov_SC03_112_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8328c, data, tail5] - [0x83290, .rodata, ov_SC03_112_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x832ac, data, tail5] + - [0x832ac, data, tail6] - [0x83304, .rodata, ov_SC03_112_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83324, data, tail6] + - [0x83324, data, tail7] - [0x833a4, .rodata, ov_SC03_112_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x833b8, data, tail7] + - [0x833b8, data, tail8] - [0x83560, .rodata, ov_SC03_112_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x836d8, data, tail8] + - [0x836d8, data, tail9] - [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 c6bbbc7dd..4d8380aad 100644 --- a/config/splat.ov_SC03_113.yaml +++ b/config/splat.ov_SC03_113.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_113_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_113_jr_8015A3C8] - [0x32cd4, c, ov_SC03_113_jr_8015AE2C] - [0x42a14, c, ov_SC03_113_jr_8016AB6C] - [0x4b364, c, ov_SC03_113_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7b508, data, tail2] - [0x7bc5c, .rodata, ov_SC03_113_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7bc90, data, tail3] - - [0x7bef8, .rodata, ov_SC03_113_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf14, data, tail4] + - [0x7bcf8, .rodata, ov_SC03_113_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bd64, data, tail4] + - [0x7bef8, .rodata, ov_SC03_113_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7bf14, data, tail5] - [0x7bf18, .rodata, ov_SC03_113_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bf34, data, tail5] + - [0x7bf34, data, tail6] - [0x7bf8c, .rodata, ov_SC03_113_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7bfac, data, tail6] + - [0x7bfac, data, tail7] - [0x7c02c, .rodata, ov_SC03_113_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c040, data, tail7] + - [0x7c040, data, tail8] - [0x7c1e8, .rodata, ov_SC03_113_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7c360, data, tail8] + - [0x7c360, data, tail9] - [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 e4d7ca294..2ec439fd5 100644 --- a/config/splat.ov_SC03_114.yaml +++ b/config/splat.ov_SC03_114.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_114_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_114_jr_8015A3C8] - [0x32cd4, c, ov_SC03_114_jr_8015AE2C] - [0x42a14, c, ov_SC03_114_jr_8016AB6C] - [0x4b364, c, ov_SC03_114_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7f214, data, tail2] - [0x7f968, .rodata, ov_SC03_114_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7f99c, data, tail3] - - [0x7fc04, .rodata, ov_SC03_114_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc20, data, tail4] + - [0x7fa04, .rodata, ov_SC03_114_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fa70, data, tail4] + - [0x7fc04, .rodata, ov_SC03_114_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fc20, data, tail5] - [0x7fc24, .rodata, ov_SC03_114_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fc40, data, tail5] + - [0x7fc40, data, tail6] - [0x7fc98, .rodata, ov_SC03_114_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fcb8, data, tail6] + - [0x7fcb8, data, tail7] - [0x7fd38, .rodata, ov_SC03_114_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fd4c, data, tail7] + - [0x7fd4c, data, tail8] - [0x7fef4, .rodata, ov_SC03_114_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8006c, data, tail8] + - [0x8006c, data, tail9] - [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 05831c6f4..042fb35db 100644 --- a/config/splat.ov_SC03_115.yaml +++ b/config/splat.ov_SC03_115.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_115_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_115_jr_8015A3C8] - [0x32cd4, c, ov_SC03_115_jr_8015AE2C] - [0x42a14, c, ov_SC03_115_jr_8016AB6C] - [0x4b364, c, ov_SC03_115_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6ab88, data, tail2] - [0x6b2dc, .rodata, ov_SC03_115_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6b310, data, tail3] - - [0x6b578, .rodata, ov_SC03_115_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b594, data, tail4] + - [0x6b378, .rodata, ov_SC03_115_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b3e4, data, tail4] + - [0x6b578, .rodata, ov_SC03_115_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6b594, data, tail5] - [0x6b598, .rodata, ov_SC03_115_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b5b4, data, tail5] + - [0x6b5b4, data, tail6] - [0x6b60c, .rodata, ov_SC03_115_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b62c, data, tail6] + - [0x6b62c, data, tail7] - [0x6b6ac, .rodata, ov_SC03_115_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b6c0, data, tail7] + - [0x6b6c0, data, tail8] - [0x6b868, .rodata, ov_SC03_115_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b9e0, data, tail8] + - [0x6b9e0, data, tail9] - [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 d994debd6..60f7d1d48 100644 --- a/config/splat.ov_SC03_116.yaml +++ b/config/splat.ov_SC03_116.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_116_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_116_jr_8015A3C8] - [0x32cd4, c, ov_SC03_116_jr_8015AE2C] - [0x42a14, c, ov_SC03_116_jr_8016AB6C] - [0x4b364, c, ov_SC03_116_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6d724, data, tail2] - [0x6de78, .rodata, ov_SC03_116_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6deac, data, tail3] - - [0x6e114, .rodata, ov_SC03_116_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e130, data, tail4] + - [0x6df14, .rodata, ov_SC03_116_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6df80, data, tail4] + - [0x6e114, .rodata, ov_SC03_116_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e130, data, tail5] - [0x6e134, .rodata, ov_SC03_116_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e150, data, tail5] + - [0x6e150, data, tail6] - [0x6e1a8, .rodata, ov_SC03_116_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e1c8, data, tail6] + - [0x6e1c8, data, tail7] - [0x6e248, .rodata, ov_SC03_116_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e25c, data, tail7] + - [0x6e25c, data, tail8] - [0x6e404, .rodata, ov_SC03_116_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e57c, data, tail8] + - [0x6e57c, data, tail9] - [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 30e0339b1..a1160a3e0 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_117_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_117_jr_8015A3C8] - [0x32cd4, c, ov_SC03_117_jr_8015AE2C] - [0x42a14, c, ov_SC03_117_jr_8016AB6C] - [0x4b364, c, ov_SC03_117_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa3dc4, data, tail2] - [0xa4518, .rodata, ov_SC03_117_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa454c, data, tail3] - - [0xa47b4, .rodata, ov_SC03_117_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47d0, data, tail4] + - [0xa45b4, .rodata, ov_SC03_117_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa4620, data, tail4] + - [0xa47b4, .rodata, ov_SC03_117_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa47d0, data, tail5] - [0xa47d4, .rodata, ov_SC03_117_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa47f0, data, tail5] + - [0xa47f0, data, tail6] - [0xa4848, .rodata, ov_SC03_117_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4868, data, tail6] + - [0xa4868, data, tail7] - [0xa48e8, .rodata, ov_SC03_117_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa48fc, data, tail7] + - [0xa48fc, data, tail8] - [0xa4aa4, .rodata, ov_SC03_117_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4c1c, data, tail8] + - [0xa4c1c, data, tail9] - [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 59a5546ba..27cfb7c70 100644 --- a/config/splat.ov_SC03_118.yaml +++ b/config/splat.ov_SC03_118.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_118_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_118_jr_8015A3C8] - [0x32cd4, c, ov_SC03_118_jr_8015AE2C] - [0x42a14, c, ov_SC03_118_jr_8016AB6C] - [0x4b364, c, ov_SC03_118_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa9d20, data, tail2] - [0xaa474, .rodata, ov_SC03_118_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa4a8, data, tail3] - - [0xaa710, .rodata, ov_SC03_118_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa72c, data, tail4] + - [0xaa510, .rodata, ov_SC03_118_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa57c, data, tail4] + - [0xaa710, .rodata, ov_SC03_118_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa72c, data, tail5] - [0xaa730, .rodata, ov_SC03_118_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail5] + - [0xaa74c, data, tail6] - [0xaa7a4, .rodata, ov_SC03_118_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa7c4, data, tail6] + - [0xaa7c4, data, tail7] - [0xaa844, .rodata, ov_SC03_118_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail7] + - [0xaa858, data, tail8] - [0xaaa00, .rodata, ov_SC03_118_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail8] + - [0xaab78, data, tail9] - [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 cdcb0416c..92d38833a 100644 --- a/config/splat.ov_SC03_119.yaml +++ b/config/splat.ov_SC03_119.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_119_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_119_jr_8015A3C8] - [0x32cd4, c, ov_SC03_119_jr_8015AE2C] - [0x42a14, c, ov_SC03_119_jr_8016AB6C] - [0x4b364, c, ov_SC03_119_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa9d20, data, tail2] - [0xaa474, .rodata, ov_SC03_119_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xaa4a8, data, tail3] - - [0xaa710, .rodata, ov_SC03_119_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa72c, data, tail4] + - [0xaa510, .rodata, ov_SC03_119_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa57c, data, tail4] + - [0xaa710, .rodata, ov_SC03_119_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xaa72c, data, tail5] - [0xaa730, .rodata, ov_SC03_119_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa74c, data, tail5] + - [0xaa74c, data, tail6] - [0xaa7a4, .rodata, ov_SC03_119_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa7c4, data, tail6] + - [0xaa7c4, data, tail7] - [0xaa844, .rodata, ov_SC03_119_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaa858, data, tail7] + - [0xaa858, data, tail8] - [0xaaa00, .rodata, ov_SC03_119_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xaab78, data, tail8] + - [0xaab78, data, tail9] - [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 841e202aa..a39fae7c6 100644 --- a/config/splat.ov_SC03_121.yaml +++ b/config/splat.ov_SC03_121.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_121_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_121_jr_8015A3C8] - [0x32cd4, c, ov_SC03_121_jr_8015AE2C] - [0x42a14, c, ov_SC03_121_jr_8016AB6C] - [0x4b364, c, ov_SC03_121_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x84828, data, tail2] - [0x84f7c, .rodata, ov_SC03_121_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x84fb0, data, tail3] - - [0x85218, .rodata, ov_SC03_121_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85234, data, tail4] + - [0x85018, .rodata, ov_SC03_121_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85084, data, tail4] + - [0x85218, .rodata, ov_SC03_121_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x85234, data, tail5] - [0x85238, .rodata, ov_SC03_121_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85254, data, tail5] + - [0x85254, data, tail6] - [0x852ac, .rodata, ov_SC03_121_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x852cc, data, tail6] + - [0x852cc, data, tail7] - [0x8534c, .rodata, ov_SC03_121_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85360, data, tail7] + - [0x85360, data, tail8] - [0x85508, .rodata, ov_SC03_121_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85680, data, tail8] + - [0x85680, data, tail9] - [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 b85a1eca2..d13cf09aa 100644 --- a/config/splat.ov_SC03_124.yaml +++ b/config/splat.ov_SC03_124.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_124_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_124_jr_8015A3C8] - [0x32cd4, c, ov_SC03_124_jr_8015AE2C] - [0x42a14, c, ov_SC03_124_jr_8016AB6C] - [0x4b364, c, ov_SC03_124_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xb6f7c, data, tail2] - [0xb76d0, .rodata, ov_SC03_124_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb7704, data, tail3] - - [0xb796c, .rodata, ov_SC03_124_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7988, data, tail4] + - [0xb776c, .rodata, ov_SC03_124_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb77d8, data, tail4] + - [0xb796c, .rodata, ov_SC03_124_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7988, data, tail5] - [0xb798c, .rodata, ov_SC03_124_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb79a8, data, tail5] + - [0xb79a8, data, tail6] - [0xb7a00, .rodata, ov_SC03_124_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7a20, data, tail6] + - [0xb7a20, data, tail7] - [0xb7aa0, .rodata, ov_SC03_124_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7ab4, data, tail7] + - [0xb7ab4, data, tail8] - [0xb7c5c, .rodata, ov_SC03_124_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7dd4, data, tail8] + - [0xb7dd4, data, tail9] - [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 fe2703c7c..3075d9e2f 100644 --- a/config/splat.ov_SC03_125.yaml +++ b/config/splat.ov_SC03_125.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_125_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_125_jr_8015A3C8] - [0x32cd4, c, ov_SC03_125_jr_8015AE2C] - [0x42a14, c, ov_SC03_125_jr_8016AB6C] - [0x4b364, c, ov_SC03_125_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x99c68, data, tail2] - [0x9a3bc, .rodata, ov_SC03_125_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9a3f0, data, tail3] - - [0x9a658, .rodata, ov_SC03_125_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a674, data, tail4] + - [0x9a458, .rodata, ov_SC03_125_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9a4c4, data, tail4] + - [0x9a658, .rodata, ov_SC03_125_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9a674, data, tail5] - [0x9a678, .rodata, ov_SC03_125_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a694, data, tail5] + - [0x9a694, data, tail6] - [0x9a6ec, .rodata, ov_SC03_125_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a70c, data, tail6] + - [0x9a70c, data, tail7] - [0x9a78c, .rodata, ov_SC03_125_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9a7a0, data, tail7] + - [0x9a7a0, data, tail8] - [0x9a948, .rodata, ov_SC03_125_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9aac0, data, tail8] + - [0x9aac0, data, tail9] - [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 6a86ca8b7..55c9dffd0 100644 --- a/config/splat.ov_SC03_126.yaml +++ b/config/splat.ov_SC03_126.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC03_126_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC03_126_jr_8015A3C8] - [0x32cd4, c, ov_SC03_126_jr_8015AE2C] - [0x42a14, c, ov_SC03_126_jr_8016AB6C] - [0x4b364, c, ov_SC03_126_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65554, data, tail2] - [0x65ca8, .rodata, ov_SC03_126_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail3] - - [0x65f44, .rodata, ov_SC03_126_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail4] + - [0x65d44, .rodata, ov_SC03_126_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65db0, data, tail4] + - [0x65f44, .rodata, ov_SC03_126_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail5] - [0x65f64, .rodata, ov_SC03_126_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail5] + - [0x65f80, data, tail6] - [0x65fd8, .rodata, ov_SC03_126_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail6] + - [0x65ff8, data, tail7] - [0x66078, .rodata, ov_SC03_126_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail7] + - [0x6608c, data, tail8] - [0x66234, .rodata, ov_SC03_126_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail8] + - [0x663ac, data, tail9] - [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 fcec01cb8..81d54c8c6 100644 --- a/config/splat.ov_SC04_000.yaml +++ b/config/splat.ov_SC04_000.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_000_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_000_jr_8015A3C8] - [0x32cd4, c, ov_SC04_000_jr_8015AE2C] - [0x42a14, c, ov_SC04_000_jr_8016AB6C] - [0x4b364, c, ov_SC04_000_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7f5d0, data, tail2] - [0x7fd24, .rodata, ov_SC04_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7fd58, data, tail3] - - [0x7ffc0, .rodata, ov_SC04_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7ffdc, data, tail4] + - [0x7fdc0, .rodata, ov_SC04_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7fe2c, data, tail4] + - [0x7ffc0, .rodata, ov_SC04_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7ffdc, data, tail5] - [0x7ffe0, .rodata, ov_SC04_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7fffc, data, tail5] + - [0x7fffc, data, tail6] - [0x80054, .rodata, ov_SC04_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80074, data, tail6] + - [0x80074, data, tail7] - [0x800f4, .rodata, ov_SC04_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80108, data, tail7] + - [0x80108, data, tail8] - [0x802b0, .rodata, ov_SC04_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80428, data, tail8] + - [0x80428, data, tail9] - [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 d3f348c60..a310d162a 100644 --- a/config/splat.ov_SC04_002.yaml +++ b/config/splat.ov_SC04_002.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_002_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_002_jr_8015A3C8] - [0x32cd4, c, ov_SC04_002_jr_8015AE2C] - [0x42a14, c, ov_SC04_002_jr_8016AB6C] - [0x4b364, c, ov_SC04_002_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x96920, data, tail2] - [0x97074, .rodata, ov_SC04_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x970a8, data, tail3] - - [0x97310, .rodata, ov_SC04_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9732c, data, tail4] + - [0x97110, .rodata, ov_SC04_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9717c, data, tail4] + - [0x97310, .rodata, ov_SC04_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9732c, data, tail5] - [0x97330, .rodata, ov_SC04_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9734c, data, tail5] + - [0x9734c, data, tail6] - [0x973a4, .rodata, ov_SC04_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x973c4, data, tail6] + - [0x973c4, data, tail7] - [0x97444, .rodata, ov_SC04_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97458, data, tail7] + - [0x97458, data, tail8] - [0x97600, .rodata, ov_SC04_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97778, data, tail8] + - [0x97778, data, tail9] - [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 b665bb626..a5f2f7a1b 100644 --- a/config/splat.ov_SC04_003.yaml +++ b/config/splat.ov_SC04_003.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_003_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_003_jr_8015A3C8] - [0x32cd4, c, ov_SC04_003_jr_8015AE2C] - [0x42a14, c, ov_SC04_003_jr_8016AB6C] - [0x4b364, c, ov_SC04_003_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7159c, data, tail2] - [0x71cf0, .rodata, ov_SC04_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x71d24, data, tail3] - - [0x71f8c, .rodata, ov_SC04_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71fa8, data, tail4] + - [0x71d8c, .rodata, ov_SC04_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71df8, data, tail4] + - [0x71f8c, .rodata, ov_SC04_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71fa8, data, tail5] - [0x71fac, .rodata, ov_SC04_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71fc8, data, tail5] + - [0x71fc8, data, tail6] - [0x72020, .rodata, ov_SC04_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x72040, data, tail6] + - [0x72040, data, tail7] - [0x720c0, .rodata, ov_SC04_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x720d4, data, tail7] + - [0x720d4, data, tail8] - [0x7227c, .rodata, ov_SC04_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x723f4, data, tail8] + - [0x723f4, data, tail9] - [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 aa849ba9e..c0522459d 100644 --- a/config/splat.ov_SC04_004.yaml +++ b/config/splat.ov_SC04_004.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_004_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_004_jr_8015A3C8] - [0x32cd4, c, ov_SC04_004_jr_8015AE2C] - [0x42a14, c, ov_SC04_004_jr_8016AB6C] - [0x4b364, c, ov_SC04_004_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x89398, data, tail2] - [0x89aec, .rodata, ov_SC04_004_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x89b20, data, tail3] - - [0x89d88, .rodata, ov_SC04_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89da4, data, tail4] + - [0x89b88, .rodata, ov_SC04_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89bf4, data, tail4] + - [0x89d88, .rodata, ov_SC04_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x89da4, data, tail5] - [0x89da8, .rodata, ov_SC04_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89dc4, data, tail5] + - [0x89dc4, data, tail6] - [0x89e1c, .rodata, ov_SC04_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89e3c, data, tail6] + - [0x89e3c, data, tail7] - [0x89ebc, .rodata, ov_SC04_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x89ed0, data, tail7] + - [0x89ed0, data, tail8] - [0x8a078, .rodata, ov_SC04_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8a1f0, data, tail8] + - [0x8a1f0, data, tail9] - [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 724cd1303..1a9be74ab 100644 --- a/config/splat.ov_SC04_005.yaml +++ b/config/splat.ov_SC04_005.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_005_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_005_jr_8015A3C8] - [0x32cd4, c, ov_SC04_005_jr_8015AE2C] - [0x42a14, c, ov_SC04_005_jr_8016AB6C] - [0x4b364, c, ov_SC04_005_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9755c, data, tail2] - [0x97cb0, .rodata, ov_SC04_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x97ce4, data, tail3] - - [0x97f4c, .rodata, ov_SC04_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f68, data, tail4] + - [0x97d4c, .rodata, ov_SC04_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97db8, data, tail4] + - [0x97f4c, .rodata, ov_SC04_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x97f68, data, tail5] - [0x97f6c, .rodata, ov_SC04_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x97f88, data, tail5] + - [0x97f88, data, tail6] - [0x97fe0, .rodata, ov_SC04_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98000, data, tail6] + - [0x98000, data, tail7] - [0x98080, .rodata, ov_SC04_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x98094, data, tail7] + - [0x98094, data, tail8] - [0x9823c, .rodata, ov_SC04_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x983b4, data, tail8] + - [0x983b4, data, tail9] - [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 2dd693d47..33e1a86ca 100644 --- a/config/splat.ov_SC04_006.yaml +++ b/config/splat.ov_SC04_006.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_006_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_006_jr_8015A3C8] - [0x32cd4, c, ov_SC04_006_jr_8015AE2C] - [0x42a14, c, ov_SC04_006_jr_8016AB6C] - [0x4b364, c, ov_SC04_006_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x73804, data, tail2] - [0x73f58, .rodata, ov_SC04_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x73f8c, data, tail3] - - [0x741f4, .rodata, ov_SC04_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74210, data, tail4] + - [0x73ff4, .rodata, ov_SC04_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74060, data, tail4] + - [0x741f4, .rodata, ov_SC04_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x74210, data, tail5] - [0x74214, .rodata, ov_SC04_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x74230, data, tail5] + - [0x74230, data, tail6] - [0x74288, .rodata, ov_SC04_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x742a8, data, tail6] + - [0x742a8, data, tail7] - [0x74328, .rodata, ov_SC04_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7433c, data, tail7] + - [0x7433c, data, tail8] - [0x744e4, .rodata, ov_SC04_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7465c, data, tail8] + - [0x7465c, data, tail9] - [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 a62d5ac8a..7b83bb995 100644 --- a/config/splat.ov_SC04_007.yaml +++ b/config/splat.ov_SC04_007.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_007_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_007_jr_8015A3C8] - [0x32cd4, c, ov_SC04_007_jr_8015AE2C] - [0x42a14, c, ov_SC04_007_jr_8016AB6C] - [0x4b364, c, ov_SC04_007_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8adc0, data, tail2] - [0x8b514, .rodata, ov_SC04_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8b548, data, tail3] - - [0x8b7b0, .rodata, ov_SC04_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7cc, data, tail4] + - [0x8b5b0, .rodata, ov_SC04_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8b61c, data, tail4] + - [0x8b7b0, .rodata, ov_SC04_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8b7cc, data, tail5] - [0x8b7d0, .rodata, ov_SC04_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b7ec, data, tail5] + - [0x8b7ec, data, tail6] - [0x8b844, .rodata, ov_SC04_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b864, data, tail6] + - [0x8b864, data, tail7] - [0x8b8e4, .rodata, ov_SC04_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8b8f8, data, tail7] + - [0x8b8f8, data, tail8] - [0x8baa0, .rodata, ov_SC04_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8bc18, data, tail8] + - [0x8bc18, data, tail9] - [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 7db615eba..9369e6f27 100644 --- a/config/splat.ov_SC04_008.yaml +++ b/config/splat.ov_SC04_008.yaml @@ -107,14 +107,16 @@ segments: - [0x67aa8, data, tail2] - [0x681fc, .rodata, ov_SC04_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68230, data, tail3] + - [0x68298, .rodata, ov_SC04_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68304, data, tail4] - [0x684b8, .rodata, ov_SC04_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x684d4, data, tail4] + - [0x684d4, data, tail5] - [0x6852c, .rodata, ov_SC04_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6854c, data, tail5] + - [0x6854c, data, tail6] - [0x685cc, .rodata, ov_SC04_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x685e0, data, tail6] + - [0x685e0, data, tail7] - [0x68788, .rodata, ov_SC04_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68900, data, tail7] + - [0x68900, data, tail8] - [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 468183bff..999e80e30 100644 --- a/config/splat.ov_SC04_009.yaml +++ b/config/splat.ov_SC04_009.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_009_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_009_jr_8015A3C8] - [0x32cd4, c, ov_SC04_009_jr_8015AE2C] - [0x42a14, c, ov_SC04_009_jr_8016AB6C] - [0x4b364, c, ov_SC04_009_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6dcbc, data, tail2] - [0x6e410, .rodata, ov_SC04_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6e444, data, tail3] - - [0x6e6ac, .rodata, ov_SC04_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6c8, data, tail4] + - [0x6e4ac, .rodata, ov_SC04_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e518, data, tail4] + - [0x6e6ac, .rodata, ov_SC04_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6e6c8, data, tail5] - [0x6e6cc, .rodata, ov_SC04_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e6e8, data, tail5] + - [0x6e6e8, data, tail6] - [0x6e740, .rodata, ov_SC04_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e760, data, tail6] + - [0x6e760, data, tail7] - [0x6e7e0, .rodata, ov_SC04_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6e7f4, data, tail7] + - [0x6e7f4, data, tail8] - [0x6e99c, .rodata, ov_SC04_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6eb14, data, tail8] + - [0x6eb14, data, tail9] - [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 0466b4c0a..e397fdb96 100644 --- a/config/splat.ov_SC04_010.yaml +++ b/config/splat.ov_SC04_010.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_010_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_010_jr_8015A3C8] - [0x32cd4, c, ov_SC04_010_jr_8015AE2C] - [0x42a14, c, ov_SC04_010_jr_8016AB6C] - [0x4b364, c, ov_SC04_010_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65148, data, tail2] - [0x6589c, .rodata, ov_SC04_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x658d0, data, tail3] - - [0x65b38, .rodata, ov_SC04_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b54, data, tail4] + - [0x65938, .rodata, ov_SC04_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x659a4, data, tail4] + - [0x65b38, .rodata, ov_SC04_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65b54, data, tail5] - [0x65b58, .rodata, ov_SC04_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65b74, data, tail5] + - [0x65b74, data, tail6] - [0x65bcc, .rodata, ov_SC04_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65bec, data, tail6] + - [0x65bec, data, tail7] - [0x65c6c, .rodata, ov_SC04_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65c80, data, tail7] + - [0x65c80, data, tail8] - [0x65e28, .rodata, ov_SC04_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65fa0, data, tail8] + - [0x65fa0, data, tail9] - [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 a55677ef9..813724fad 100644 --- a/config/splat.ov_SC04_011.yaml +++ b/config/splat.ov_SC04_011.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_011_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_011_jr_8015A3C8] - [0x32cd4, c, ov_SC04_011_jr_8015AE2C] - [0x42a14, c, ov_SC04_011_jr_8016AB6C] - [0x4b364, c, ov_SC04_011_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc46e4, data, tail2] - [0xc4e38, .rodata, ov_SC04_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc4e6c, data, tail3] - - [0xc50d4, .rodata, ov_SC04_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc50f0, data, tail4] + - [0xc4ed4, .rodata, ov_SC04_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc4f40, data, tail4] + - [0xc50d4, .rodata, ov_SC04_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc50f0, data, tail5] - [0xc50f4, .rodata, ov_SC04_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5110, data, tail5] + - [0xc5110, data, tail6] - [0xc5168, .rodata, ov_SC04_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc5188, data, tail6] + - [0xc5188, data, tail7] - [0xc5208, .rodata, ov_SC04_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc521c, data, tail7] + - [0xc521c, data, tail8] - [0xc53c4, .rodata, ov_SC04_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc553c, data, tail8] + - [0xc553c, data, tail9] - [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 25dd818c8..74f932969 100644 --- a/config/splat.ov_SC04_012.yaml +++ b/config/splat.ov_SC04_012.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_012_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_012_jr_8015A3C8] - [0x32cd4, c, ov_SC04_012_jr_8015AE2C] - [0x42a14, c, ov_SC04_012_jr_8016AB6C] - [0x4b364, c, ov_SC04_012_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x67828, data, tail2] - [0x67f7c, .rodata, ov_SC04_012_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x67fb0, data, tail3] - - [0x68218, .rodata, ov_SC04_012_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68234, data, tail4] + - [0x68018, .rodata, ov_SC04_012_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68084, data, tail4] + - [0x68218, .rodata, ov_SC04_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x68234, data, tail5] - [0x68238, .rodata, ov_SC04_012_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68254, data, tail5] + - [0x68254, data, tail6] - [0x682ac, .rodata, ov_SC04_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x682cc, data, tail6] + - [0x682cc, data, tail7] - [0x6834c, .rodata, ov_SC04_012_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68360, data, tail7] + - [0x68360, data, tail8] - [0x68508, .rodata, ov_SC04_012_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x68680, data, tail8] + - [0x68680, data, tail9] - [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 66fa34b3e..38ff0bd87 100644 --- a/config/splat.ov_SC04_015.yaml +++ b/config/splat.ov_SC04_015.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_015_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_015_jr_8015A3C8] - [0x32cd4, c, ov_SC04_015_jr_8015AE2C] - [0x42a14, c, ov_SC04_015_jr_8016AB6C] - [0x4b364, c, ov_SC04_015_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9e4c0, data, tail2] - [0x9ec14, .rodata, ov_SC04_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9ec48, data, tail3] - - [0x9eeb0, .rodata, ov_SC04_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eecc, data, tail4] + - [0x9ecb0, .rodata, ov_SC04_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9ed1c, data, tail4] + - [0x9eeb0, .rodata, ov_SC04_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9eecc, data, tail5] - [0x9eed0, .rodata, ov_SC04_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eeec, data, tail5] + - [0x9eeec, data, tail6] - [0x9ef44, .rodata, ov_SC04_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9ef64, data, tail6] + - [0x9ef64, data, tail7] - [0x9efe4, .rodata, ov_SC04_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9eff8, data, tail7] + - [0x9eff8, data, tail8] - [0x9f1a0, .rodata, ov_SC04_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9f318, data, tail8] + - [0x9f318, data, tail9] - [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 939f3fa93..0a618655a 100644 --- a/config/splat.ov_SC04_016.yaml +++ b/config/splat.ov_SC04_016.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_016_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_016_jr_8015A3C8] - [0x32cd4, c, ov_SC04_016_jr_8015AE2C] - [0x42a14, c, ov_SC04_016_jr_8016AB6C] - [0x4b364, c, ov_SC04_016_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7c678, data, tail2] - [0x7cdcc, .rodata, ov_SC04_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7ce00, data, tail3] - - [0x7d068, .rodata, ov_SC04_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d084, data, tail4] + - [0x7ce68, .rodata, ov_SC04_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7ced4, data, tail4] + - [0x7d068, .rodata, ov_SC04_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7d084, data, tail5] - [0x7d088, .rodata, ov_SC04_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d0a4, data, tail5] + - [0x7d0a4, data, tail6] - [0x7d0fc, .rodata, ov_SC04_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d11c, data, tail6] + - [0x7d11c, data, tail7] - [0x7d19c, .rodata, ov_SC04_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d1b0, data, tail7] + - [0x7d1b0, data, tail8] - [0x7d358, .rodata, ov_SC04_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7d4d0, data, tail8] + - [0x7d4d0, data, tail9] - [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 bf9c83591..bd3abd9aa 100644 --- a/config/splat.ov_SC04_018.yaml +++ b/config/splat.ov_SC04_018.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_018_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_018_jr_8015A3C8] - [0x32cd4, c, ov_SC04_018_jr_8015AE2C] - [0x42a14, c, ov_SC04_018_jr_8016AB6C] - [0x4b364, c, ov_SC04_018_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xbc490, data, tail2] - [0xbcbe4, .rodata, ov_SC04_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcc18, data, tail3] - - [0xbce80, .rodata, ov_SC04_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce9c, data, tail4] + - [0xbcc80, .rodata, ov_SC04_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbccec, data, tail4] + - [0xbce80, .rodata, ov_SC04_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbce9c, data, tail5] - [0xbcea0, .rodata, ov_SC04_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail5] + - [0xbcebc, data, tail6] - [0xbcf14, .rodata, ov_SC04_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcf34, data, tail6] + - [0xbcf34, data, tail7] - [0xbcfb4, .rodata, ov_SC04_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail7] + - [0xbcfc8, data, tail8] - [0xbd170, .rodata, ov_SC04_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail8] + - [0xbd2e8, data, tail9] - [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 920dd24fe..cf7eae223 100644 --- a/config/splat.ov_SC04_019.yaml +++ b/config/splat.ov_SC04_019.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_019_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_019_jr_8015A3C8] - [0x32cd4, c, ov_SC04_019_jr_8015AE2C] - [0x42a14, c, ov_SC04_019_jr_8016AB6C] - [0x4b364, c, ov_SC04_019_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xbc490, data, tail2] - [0xbcbe4, .rodata, ov_SC04_019_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbcc18, data, tail3] - - [0xbce80, .rodata, ov_SC04_019_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbce9c, data, tail4] + - [0xbcc80, .rodata, ov_SC04_019_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbccec, data, tail4] + - [0xbce80, .rodata, ov_SC04_019_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbce9c, data, tail5] - [0xbcea0, .rodata, ov_SC04_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcebc, data, tail5] + - [0xbcebc, data, tail6] - [0xbcf14, .rodata, ov_SC04_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcf34, data, tail6] + - [0xbcf34, data, tail7] - [0xbcfb4, .rodata, ov_SC04_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcfc8, data, tail7] + - [0xbcfc8, data, tail8] - [0xbd170, .rodata, ov_SC04_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbd2e8, data, tail8] + - [0xbd2e8, data, tail9] - [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 17c1d8eb7..5f68d4bbc 100644 --- a/config/splat.ov_SC04_020.yaml +++ b/config/splat.ov_SC04_020.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_020_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_020_jr_8015A3C8] - [0x32cd4, c, ov_SC04_020_jr_8015AE2C] - [0x42a14, c, ov_SC04_020_jr_8016AB6C] - [0x4b364, c, ov_SC04_020_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x91eb8, data, tail2] - [0x9260c, .rodata, ov_SC04_020_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x92640, data, tail3] - - [0x928a8, .rodata, ov_SC04_020_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928c4, data, tail4] + - [0x926a8, .rodata, ov_SC04_020_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x92714, data, tail4] + - [0x928a8, .rodata, ov_SC04_020_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x928c4, data, tail5] - [0x928c8, .rodata, ov_SC04_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x928e4, data, tail5] + - [0x928e4, data, tail6] - [0x9293c, .rodata, ov_SC04_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9295c, data, tail6] + - [0x9295c, data, tail7] - [0x929dc, .rodata, ov_SC04_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x929f0, data, tail7] + - [0x929f0, data, tail8] - [0x92b98, .rodata, ov_SC04_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x92d10, data, tail8] + - [0x92d10, data, tail9] - [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 2de3141de..edfdb5918 100644 --- a/config/splat.ov_SC04_021.yaml +++ b/config/splat.ov_SC04_021.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC04_021_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC04_021_jr_8015A3C8] - [0x32cd4, c, ov_SC04_021_jr_8015AE2C] - [0x42a14, c, ov_SC04_021_jr_8016AB6C] - [0x4b364, c, ov_SC04_021_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65554, data, tail2] - [0x65ca8, .rodata, ov_SC04_021_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail3] - - [0x65f44, .rodata, ov_SC04_021_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail4] + - [0x65d44, .rodata, ov_SC04_021_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65db0, data, tail4] + - [0x65f44, .rodata, ov_SC04_021_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail5] - [0x65f64, .rodata, ov_SC04_021_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail5] + - [0x65f80, data, tail6] - [0x65fd8, .rodata, ov_SC04_021_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail6] + - [0x65ff8, data, tail7] - [0x66078, .rodata, ov_SC04_021_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail7] + - [0x6608c, data, tail8] - [0x66234, .rodata, ov_SC04_021_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail8] + - [0x663ac, data, tail9] - [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 602dda61d..cdf506709 100644 --- a/config/splat.ov_SC05_000.yaml +++ b/config/splat.ov_SC05_000.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_000_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_000_jr_8015A3C8] - [0x32cd4, c, ov_SC05_000_jr_8015AE2C] - [0x42a14, c, ov_SC05_000_jr_8016AB6C] - [0x4b364, c, ov_SC05_000_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x706a4, data, tail2] - [0x70df8, .rodata, ov_SC05_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70e2c, data, tail3] - - [0x71094, .rodata, ov_SC05_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710b0, data, tail4] + - [0x70e94, .rodata, ov_SC05_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70f00, data, tail4] + - [0x71094, .rodata, ov_SC05_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x710b0, data, tail5] - [0x710b4, .rodata, ov_SC05_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710d0, data, tail5] + - [0x710d0, data, tail6] - [0x71128, .rodata, ov_SC05_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71148, data, tail6] + - [0x71148, data, tail7] - [0x711c8, .rodata, ov_SC05_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x711dc, data, tail7] + - [0x711dc, data, tail8] - [0x71384, .rodata, ov_SC05_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x714fc, data, tail8] + - [0x714fc, data, tail9] - [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 ed2c18b81..b232b4f9f 100644 --- a/config/splat.ov_SC05_001.yaml +++ b/config/splat.ov_SC05_001.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_001_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_001_jr_8015A3C8] - [0x32cd4, c, ov_SC05_001_jr_8015AE2C] - [0x42a14, c, ov_SC05_001_jr_8016AB6C] - [0x4b364, c, ov_SC05_001_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8b658, data, tail2] - [0x8bdac, .rodata, ov_SC05_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8bde0, data, tail3] - - [0x8c048, .rodata, ov_SC05_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c064, data, tail4] + - [0x8be48, .rodata, ov_SC05_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8beb4, data, tail4] + - [0x8c048, .rodata, ov_SC05_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8c064, data, tail5] - [0x8c068, .rodata, ov_SC05_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c084, data, tail5] + - [0x8c084, data, tail6] - [0x8c0dc, .rodata, ov_SC05_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c0fc, data, tail6] + - [0x8c0fc, data, tail7] - [0x8c17c, .rodata, ov_SC05_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c190, data, tail7] + - [0x8c190, data, tail8] - [0x8c338, .rodata, ov_SC05_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8c4b0, data, tail8] + - [0x8c4b0, data, tail9] - [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 21f386ba2..f59890f94 100644 --- a/config/splat.ov_SC05_002.yaml +++ b/config/splat.ov_SC05_002.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_002_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_002_jr_8015A3C8] - [0x32cd4, c, ov_SC05_002_jr_8015AE2C] - [0x42a14, c, ov_SC05_002_jr_8016AB6C] - [0x4b364, c, ov_SC05_002_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x75a04, data, tail2] - [0x76158, .rodata, ov_SC05_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7618c, data, tail3] - - [0x763f4, .rodata, ov_SC05_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76410, data, tail4] + - [0x761f4, .rodata, ov_SC05_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76260, data, tail4] + - [0x763f4, .rodata, ov_SC05_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x76410, data, tail5] - [0x76414, .rodata, ov_SC05_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x76430, data, tail5] + - [0x76430, data, tail6] - [0x76488, .rodata, ov_SC05_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x764a8, data, tail6] + - [0x764a8, data, tail7] - [0x76528, .rodata, ov_SC05_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7653c, data, tail7] + - [0x7653c, data, tail8] - [0x766e4, .rodata, ov_SC05_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7685c, data, tail8] + - [0x7685c, data, tail9] - [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 d99ced62b..5de8d71c9 100644 --- a/config/splat.ov_SC05_003.yaml +++ b/config/splat.ov_SC05_003.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_003_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_003_jr_8015A3C8] - [0x32cd4, c, ov_SC05_003_jr_8015AE2C] - [0x42a14, c, ov_SC05_003_jr_8016AB6C] - [0x4b364, c, ov_SC05_003_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x82500, data, tail2] - [0x82c54, .rodata, ov_SC05_003_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x82c88, data, tail3] - - [0x82ef0, .rodata, ov_SC05_003_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f0c, data, tail4] + - [0x82cf0, .rodata, ov_SC05_003_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82d5c, data, tail4] + - [0x82ef0, .rodata, ov_SC05_003_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x82f0c, data, tail5] - [0x82f10, .rodata, ov_SC05_003_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82f2c, data, tail5] + - [0x82f2c, data, tail6] - [0x82f84, .rodata, ov_SC05_003_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82fa4, data, tail6] + - [0x82fa4, data, tail7] - [0x83024, .rodata, ov_SC05_003_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83038, data, tail7] + - [0x83038, data, tail8] - [0x831e0, .rodata, ov_SC05_003_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x83358, data, tail8] + - [0x83358, data, tail9] - [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 c2e7ae33f..8e0829f40 100644 --- a/config/splat.ov_SC05_004.yaml +++ b/config/splat.ov_SC05_004.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC05_004] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC05_004_jr_8015A3C8] - [0x32cd4, c, ov_SC05_004_jr_8015AE2C] - [0x42a14, c, ov_SC05_004_jr_8016AB6C] - [0x4b364, c, ov_SC05_004_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x594c8, data, tail] - [0x74a28, .rodata, ov_SC05_004] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x74af4, data, tail2] - - [0x754e4, .rodata, ov_SC05_004_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75500, data, tail3] + - [0x752e4, .rodata, ov_SC05_004_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75350, data, tail3] + - [0x754e4, .rodata, ov_SC05_004_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75500, data, tail4] - [0x75504, .rodata, ov_SC05_004_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75520, data, tail4] + - [0x75520, data, tail5] - [0x75578, .rodata, ov_SC05_004_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75598, data, tail5] + - [0x75598, data, tail6] - [0x75618, .rodata, ov_SC05_004_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7562c, data, tail6] + - [0x7562c, data, tail7] - [0x757d4, .rodata, ov_SC05_004_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7594c, data, tail7] + - [0x7594c, data, tail8] - [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 b46d46819..9a1d570d6 100644 --- a/config/splat.ov_SC05_005.yaml +++ b/config/splat.ov_SC05_005.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_005_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_005_jr_8015A3C8] - [0x32cd4, c, ov_SC05_005_jr_8015AE2C] - [0x42a14, c, ov_SC05_005_jr_8016AB6C] - [0x4b364, c, ov_SC05_005_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x877dc, data, tail2] - [0x87f30, .rodata, ov_SC05_005_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87f64, data, tail3] - - [0x881cc, .rodata, ov_SC05_005_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x881e8, data, tail4] + - [0x87fcc, .rodata, ov_SC05_005_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x88038, data, tail4] + - [0x881cc, .rodata, ov_SC05_005_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x881e8, data, tail5] - [0x881ec, .rodata, ov_SC05_005_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88208, data, tail5] + - [0x88208, data, tail6] - [0x88260, .rodata, ov_SC05_005_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88280, data, tail6] + - [0x88280, data, tail7] - [0x88300, .rodata, ov_SC05_005_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88314, data, tail7] + - [0x88314, data, tail8] - [0x884bc, .rodata, ov_SC05_005_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88634, data, tail8] + - [0x88634, data, tail9] - [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 a67d3ae5e..7e99ae1f6 100644 --- a/config/splat.ov_SC05_006.yaml +++ b/config/splat.ov_SC05_006.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_006_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_006_jr_8015A3C8] - [0x32cd4, c, ov_SC05_006_jr_8015AE2C] - [0x42a14, c, ov_SC05_006_jr_8016AB6C] - [0x4b364, c, ov_SC05_006_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6592c, data, tail2] - [0x66080, .rodata, ov_SC05_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x660b4, data, tail3] - - [0x6631c, .rodata, ov_SC05_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66338, data, tail4] + - [0x6611c, .rodata, ov_SC05_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66188, data, tail4] + - [0x6631c, .rodata, ov_SC05_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x66338, data, tail5] - [0x6633c, .rodata, ov_SC05_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66358, data, tail5] + - [0x66358, data, tail6] - [0x663b0, .rodata, ov_SC05_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663d0, data, tail6] + - [0x663d0, data, tail7] - [0x66450, .rodata, ov_SC05_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66464, data, tail7] + - [0x66464, data, tail8] - [0x6660c, .rodata, ov_SC05_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x66784, data, tail8] + - [0x66784, data, tail9] - [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 fba9edde2..3863ebc70 100644 --- a/config/splat.ov_SC05_007.yaml +++ b/config/splat.ov_SC05_007.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_007_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_007_jr_8015A3C8] - [0x32cd4, c, ov_SC05_007_jr_8015AE2C] - [0x42a14, c, ov_SC05_007_jr_8016AB6C] - [0x4b364, c, ov_SC05_007_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x72904, data, tail2] - [0x73058, .rodata, ov_SC05_007_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7308c, data, tail3] - - [0x732f4, .rodata, ov_SC05_007_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73310, data, tail4] + - [0x730f4, .rodata, ov_SC05_007_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73160, data, tail4] + - [0x732f4, .rodata, ov_SC05_007_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73310, data, tail5] - [0x73314, .rodata, ov_SC05_007_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73330, data, tail5] + - [0x73330, data, tail6] - [0x73388, .rodata, ov_SC05_007_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x733a8, data, tail6] + - [0x733a8, data, tail7] - [0x73428, .rodata, ov_SC05_007_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7343c, data, tail7] + - [0x7343c, data, tail8] - [0x735e4, .rodata, ov_SC05_007_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7375c, data, tail8] + - [0x7375c, data, tail9] - [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 a06c955bd..63351077c 100644 --- a/config/splat.ov_SC05_008.yaml +++ b/config/splat.ov_SC05_008.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_008_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_008_jr_8015A3C8] - [0x32cd4, c, ov_SC05_008_jr_8015AE2C] - [0x42a14, c, ov_SC05_008_jr_8016AB6C] - [0x4b364, c, ov_SC05_008_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x76c38, data, tail2] - [0x7738c, .rodata, ov_SC05_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x773c0, data, tail3] - - [0x77628, .rodata, ov_SC05_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77644, data, tail4] + - [0x77428, .rodata, ov_SC05_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77494, data, tail4] + - [0x77628, .rodata, ov_SC05_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77644, data, tail5] - [0x77648, .rodata, ov_SC05_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77664, data, tail5] + - [0x77664, data, tail6] - [0x776bc, .rodata, ov_SC05_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x776dc, data, tail6] + - [0x776dc, data, tail7] - [0x7775c, .rodata, ov_SC05_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77770, data, tail7] + - [0x77770, data, tail8] - [0x77918, .rodata, ov_SC05_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a90, data, tail8] + - [0x77a90, data, tail9] - [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 c9583322c..cb9b4131c 100644 --- a/config/splat.ov_SC05_009.yaml +++ b/config/splat.ov_SC05_009.yaml @@ -107,14 +107,16 @@ segments: - [0x6c64c, data, tail2] - [0x6cda0, .rodata, ov_SC05_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6cdd4, data, tail3] + - [0x6ce3c, .rodata, ov_SC05_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cea8, data, tail4] - [0x6d05c, .rodata, ov_SC05_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d078, data, tail4] + - [0x6d078, data, tail5] - [0x6d0d0, .rodata, ov_SC05_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d0f0, data, tail5] + - [0x6d0f0, data, tail6] - [0x6d170, .rodata, ov_SC05_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d184, data, tail6] + - [0x6d184, data, tail7] - [0x6d32c, .rodata, ov_SC05_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6d4a4, data, tail7] + - [0x6d4a4, data, tail8] - [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 4f47d6cb0..741b7219c 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_010_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_010_jr_8015A3C8] - [0x32cd4, c, ov_SC05_010_jr_8015AE2C] - [0x42a14, c, ov_SC05_010_jr_8016AB6C] - [0x4b364, c, ov_SC05_010_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x9c880, data, tail2] - [0x9cfd4, .rodata, ov_SC05_010_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9d008, data, tail3] - - [0x9d270, .rodata, ov_SC05_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d28c, data, tail4] + - [0x9d070, .rodata, ov_SC05_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d0dc, data, tail4] + - [0x9d270, .rodata, ov_SC05_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9d28c, data, tail5] - [0x9d290, .rodata, ov_SC05_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d2ac, data, tail5] + - [0x9d2ac, data, tail6] - [0x9d304, .rodata, ov_SC05_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d324, data, tail6] + - [0x9d324, data, tail7] - [0x9d3a4, .rodata, ov_SC05_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d3b8, data, tail7] + - [0x9d3b8, data, tail8] - [0x9d560, .rodata, ov_SC05_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9d6d8, data, tail8] + - [0x9d6d8, data, tail9] - [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 677f43d6e..f5f961569 100644 --- a/config/splat.ov_SC05_011.yaml +++ b/config/splat.ov_SC05_011.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_011_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_011_jr_8015A3C8] - [0x32cd4, c, ov_SC05_011_jr_8015AE2C] - [0x42a14, c, ov_SC05_011_jr_8016AB6C] - [0x4b364, c, ov_SC05_011_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x72be4, data, tail2] - [0x73338, .rodata, ov_SC05_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x7336c, data, tail3] - - [0x735d4, .rodata, ov_SC05_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x735f0, data, tail4] + - [0x733d4, .rodata, ov_SC05_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73440, data, tail4] + - [0x735d4, .rodata, ov_SC05_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x735f0, data, tail5] - [0x735f4, .rodata, ov_SC05_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73610, data, tail5] + - [0x73610, data, tail6] - [0x73668, .rodata, ov_SC05_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73688, data, tail6] + - [0x73688, data, tail7] - [0x73708, .rodata, ov_SC05_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7371c, data, tail7] + - [0x7371c, data, tail8] - [0x738c4, .rodata, ov_SC05_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73a3c, data, tail8] + - [0x73a3c, data, tail9] - [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 8649096d7..d9e01a560 100644 --- a/config/splat.ov_SC05_017.yaml +++ b/config/splat.ov_SC05_017.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_017_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_017_jr_8015A3C8] - [0x32cd4, c, ov_SC05_017_jr_8015AE2C] - [0x42a14, c, ov_SC05_017_jr_8016AB6C] - [0x4b364, c, ov_SC05_017_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xc22cc, data, tail2] - [0xc2a20, .rodata, ov_SC05_017_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc2a54, data, tail3] - - [0xc2cbc, .rodata, ov_SC05_017_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cd8, data, tail4] + - [0xc2abc, .rodata, ov_SC05_017_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc2b28, data, tail4] + - [0xc2cbc, .rodata, ov_SC05_017_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xc2cd8, data, tail5] - [0xc2cdc, .rodata, ov_SC05_017_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2cf8, data, tail5] + - [0xc2cf8, data, tail6] - [0xc2d50, .rodata, ov_SC05_017_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2d70, data, tail6] + - [0xc2d70, data, tail7] - [0xc2df0, .rodata, ov_SC05_017_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc2e04, data, tail7] + - [0xc2e04, data, tail8] - [0xc2fac, .rodata, ov_SC05_017_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc3124, data, tail8] + - [0xc3124, data, tail9] - [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 faba90d2e..98ad89070 100644 --- a/config/splat.ov_SC05_018.yaml +++ b/config/splat.ov_SC05_018.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_018_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_018_jr_8015A3C8] - [0x32cd4, c, ov_SC05_018_jr_8015AE2C] - [0x42a14, c, ov_SC05_018_jr_8016AB6C] - [0x4b364, c, ov_SC05_018_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xbbe40, data, tail2] - [0xbc594, .rodata, ov_SC05_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xbc5c8, data, tail3] - - [0xbc830, .rodata, ov_SC05_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc84c, data, tail4] + - [0xbc630, .rodata, ov_SC05_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbc69c, data, tail4] + - [0xbc830, .rodata, ov_SC05_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xbc84c, data, tail5] - [0xbc850, .rodata, ov_SC05_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc86c, data, tail5] + - [0xbc86c, data, tail6] - [0xbc8c4, .rodata, ov_SC05_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc8e4, data, tail6] + - [0xbc8e4, data, tail7] - [0xbc964, .rodata, ov_SC05_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbc978, data, tail7] + - [0xbc978, data, tail8] - [0xbcb20, .rodata, ov_SC05_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xbcc98, data, tail8] + - [0xbcc98, data, tail9] - [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 ffc91da0b..c98df4895 100644 --- a/config/splat.ov_SC05_019.yaml +++ b/config/splat.ov_SC05_019.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC05_019_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC05_019_jr_8015A3C8] - [0x32cd4, c, ov_SC05_019_jr_8015AE2C] - [0x42a14, c, ov_SC05_019_jr_8016AB6C] - [0x4b364, c, ov_SC05_019_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x65554, data, tail2] - [0x65ca8, .rodata, ov_SC05_019_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x65cdc, data, tail3] - - [0x65f44, .rodata, ov_SC05_019_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f60, data, tail4] + - [0x65d44, .rodata, ov_SC05_019_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65db0, data, tail4] + - [0x65f44, .rodata, ov_SC05_019_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x65f60, data, tail5] - [0x65f64, .rodata, ov_SC05_019_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65f80, data, tail5] + - [0x65f80, data, tail6] - [0x65fd8, .rodata, ov_SC05_019_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x65ff8, data, tail6] + - [0x65ff8, data, tail7] - [0x66078, .rodata, ov_SC05_019_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6608c, data, tail7] + - [0x6608c, data, tail8] - [0x66234, .rodata, ov_SC05_019_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x663ac, data, tail8] + - [0x663ac, data, tail9] - [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 418514d5c..8dc78fafb 100644 --- a/config/splat.ov_SC06_000.yaml +++ b/config/splat.ov_SC06_000.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC06_000] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC06_000_jr_8015A3C8] - [0x32cd4, c, ov_SC06_000_jr_8015AE2C] - [0x42a14, c, ov_SC06_000_jr_8016AB6C] - [0x4b364, c, ov_SC06_000_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x600e4, data, tail] - [0x84100, .rodata, ov_SC06_000] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x841cc, data, tail2] - - [0x84bbc, .rodata, ov_SC06_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bd8, data, tail3] + - [0x849bc, .rodata, ov_SC06_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x84a28, data, tail3] + - [0x84bbc, .rodata, ov_SC06_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x84bd8, data, tail4] - [0x84bdc, .rodata, ov_SC06_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84bf8, data, tail4] + - [0x84bf8, data, tail5] - [0x84c50, .rodata, ov_SC06_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84c70, data, tail5] + - [0x84c70, data, tail6] - [0x84cf0, .rodata, ov_SC06_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x84d04, data, tail6] + - [0x84d04, data, tail7] - [0x84eac, .rodata, ov_SC06_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x85024, data, tail7] + - [0x85024, data, tail8] - [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 48e377fb7..2a0dce258 100644 --- a/config/splat.ov_SC06_006.yaml +++ b/config/splat.ov_SC06_006.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_006_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_006_jr_8015A3C8] - [0x32cd4, c, ov_SC06_006_jr_8015AE2C] - [0x42a14, c, ov_SC06_006_jr_8016AB6C] - [0x4b364, c, ov_SC06_006_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xcdad4, data, tail2] - [0xce228, .rodata, ov_SC06_006_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xce25c, data, tail3] - - [0xce4c4, .rodata, ov_SC06_006_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce4e0, data, tail4] + - [0xce2c4, .rodata, ov_SC06_006_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce330, data, tail4] + - [0xce4c4, .rodata, ov_SC06_006_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xce4e0, data, tail5] - [0xce4e4, .rodata, ov_SC06_006_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce500, data, tail5] + - [0xce500, data, tail6] - [0xce558, .rodata, ov_SC06_006_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce578, data, tail6] + - [0xce578, data, tail7] - [0xce5f8, .rodata, ov_SC06_006_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce60c, data, tail7] + - [0xce60c, data, tail8] - [0xce7b4, .rodata, ov_SC06_006_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xce92c, data, tail8] + - [0xce92c, data, tail9] - [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 a5260799c..aa473abc6 100644 --- a/config/splat.ov_SC06_008.yaml +++ b/config/splat.ov_SC06_008.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_008_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_008_jr_8015A3C8] - [0x32cd4, c, ov_SC06_008_jr_8015AE2C] - [0x42a14, c, ov_SC06_008_jr_8016AB6C] - [0x4b364, c, ov_SC06_008_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7fbac, data, tail2] - [0x80300, .rodata, ov_SC06_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80334, data, tail3] - - [0x8059c, .rodata, ov_SC06_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x805b8, data, tail4] + - [0x8039c, .rodata, ov_SC06_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80408, data, tail4] + - [0x8059c, .rodata, ov_SC06_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x805b8, data, tail5] - [0x805bc, .rodata, ov_SC06_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x805d8, data, tail5] + - [0x805d8, data, tail6] - [0x80630, .rodata, ov_SC06_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80650, data, tail6] + - [0x80650, data, tail7] - [0x806d0, .rodata, ov_SC06_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x806e4, data, tail7] + - [0x806e4, data, tail8] - [0x8088c, .rodata, ov_SC06_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x80a04, data, tail8] + - [0x80a04, data, tail9] - [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 c3c9205d8..c0533c4b1 100644 --- a/config/splat.ov_SC06_010.yaml +++ b/config/splat.ov_SC06_010.yaml @@ -96,6 +96,8 @@ segments: - [0x0, c, ov_SC06_010] # -O2 before whale (file 0x0..0x1CA44) - [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] + - [0x32270, c, ov_SC06_010_jr_8015A3C8] - [0x32cd4, c, ov_SC06_010_jr_8015AE2C] - [0x42a14, c, ov_SC06_010_jr_8016AB6C] - [0x4b364, c, ov_SC06_010_jr_801734BC] @@ -103,16 +105,18 @@ segments: - [0x5e84c, data, tail] - [0x87b34, .rodata, ov_SC06_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x87c00, data, tail2] - - [0x885f0, .rodata, ov_SC06_010_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8860c, data, tail3] + - [0x883f0, .rodata, ov_SC06_010_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8845c, data, tail3] + - [0x885f0, .rodata, ov_SC06_010_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8860c, data, tail4] - [0x88610, .rodata, ov_SC06_010_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8862c, data, tail4] + - [0x8862c, data, tail5] - [0x88684, .rodata, ov_SC06_010_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x886a4, data, tail5] + - [0x886a4, data, tail6] - [0x88724, .rodata, ov_SC06_010_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88738, data, tail6] + - [0x88738, data, tail7] - [0x888e0, .rodata, ov_SC06_010_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x88a58, data, tail7] + - [0x88a58, data, tail8] - [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 377724bc6..b817b55ab 100644 --- a/config/splat.ov_SC06_011.yaml +++ b/config/splat.ov_SC06_011.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_011_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_011_jr_8015A3C8] - [0x32cd4, c, ov_SC06_011_jr_8015AE2C] - [0x42a14, c, ov_SC06_011_jr_8016AB6C] - [0x4b364, c, ov_SC06_011_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x81760, data, tail2] - [0x81eb4, .rodata, ov_SC06_011_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x81ee8, data, tail3] - - [0x82150, .rodata, ov_SC06_011_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8216c, data, tail4] + - [0x81f50, .rodata, ov_SC06_011_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81fbc, data, tail4] + - [0x82150, .rodata, ov_SC06_011_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8216c, data, tail5] - [0x82170, .rodata, ov_SC06_011_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x8218c, data, tail5] + - [0x8218c, data, tail6] - [0x821e4, .rodata, ov_SC06_011_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82204, data, tail6] + - [0x82204, data, tail7] - [0x82284, .rodata, ov_SC06_011_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x82298, data, tail7] + - [0x82298, data, tail8] - [0x82440, .rodata, ov_SC06_011_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x825b8, data, tail8] + - [0x825b8, data, tail9] - [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 121a7f9c3..d5992b02b 100644 --- a/config/splat.ov_SC06_013.yaml +++ b/config/splat.ov_SC06_013.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_013_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_013_jr_8015A3C8] - [0x32cd4, c, ov_SC06_013_jr_8015AE2C] - [0x42a14, c, ov_SC06_013_jr_8016AB6C] - [0x4b364, c, ov_SC06_013_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x70634, data, tail2] - [0x70d88, .rodata, ov_SC06_013_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x70dbc, data, tail3] - - [0x71024, .rodata, ov_SC06_013_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71040, data, tail4] + - [0x70e24, .rodata, ov_SC06_013_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x70e90, data, tail4] + - [0x71024, .rodata, ov_SC06_013_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71040, data, tail5] - [0x71044, .rodata, ov_SC06_013_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71060, data, tail5] + - [0x71060, data, tail6] - [0x710b8, .rodata, ov_SC06_013_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x710d8, data, tail6] + - [0x710d8, data, tail7] - [0x71158, .rodata, ov_SC06_013_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7116c, data, tail7] + - [0x7116c, data, tail8] - [0x71314, .rodata, ov_SC06_013_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7148c, data, tail8] + - [0x7148c, data, tail9] - [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 cad892345..53baec817 100644 --- a/config/splat.ov_SC06_014.yaml +++ b/config/splat.ov_SC06_014.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_014_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_014_jr_8015A3C8] - [0x32cd4, c, ov_SC06_014_jr_8015AE2C] - [0x42a14, c, ov_SC06_014_jr_8016AB6C] - [0x4b364, c, ov_SC06_014_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x77024, data, tail2] - [0x77778, .rodata, ov_SC06_014_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x777ac, data, tail3] - - [0x77a14, .rodata, ov_SC06_014_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a30, data, tail4] + - [0x77814, .rodata, ov_SC06_014_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77880, data, tail4] + - [0x77a14, .rodata, ov_SC06_014_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x77a30, data, tail5] - [0x77a34, .rodata, ov_SC06_014_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77a50, data, tail5] + - [0x77a50, data, tail6] - [0x77aa8, .rodata, ov_SC06_014_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77ac8, data, tail6] + - [0x77ac8, data, tail7] - [0x77b48, .rodata, ov_SC06_014_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77b5c, data, tail7] + - [0x77b5c, data, tail8] - [0x77d04, .rodata, ov_SC06_014_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x77e7c, data, tail8] + - [0x77e7c, data, tail9] - [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 dd88648f9..2d96e9e88 100644 --- a/config/splat.ov_SC06_015.yaml +++ b/config/splat.ov_SC06_015.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_015_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_015_jr_8015A3C8] - [0x32cd4, c, ov_SC06_015_jr_8015AE2C] - [0x42a14, c, ov_SC06_015_jr_8016AB6C] - [0x4b364, c, ov_SC06_015_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6a404, data, tail2] - [0x6ab58, .rodata, ov_SC06_015_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6ab8c, data, tail3] - - [0x6adf4, .rodata, ov_SC06_015_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae10, data, tail4] + - [0x6abf4, .rodata, ov_SC06_015_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6ac60, data, tail4] + - [0x6adf4, .rodata, ov_SC06_015_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6ae10, data, tail5] - [0x6ae14, .rodata, ov_SC06_015_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6ae30, data, tail5] + - [0x6ae30, data, tail6] - [0x6ae88, .rodata, ov_SC06_015_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6aea8, data, tail6] + - [0x6aea8, data, tail7] - [0x6af28, .rodata, ov_SC06_015_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6af3c, data, tail7] + - [0x6af3c, data, tail8] - [0x6b0e4, .rodata, ov_SC06_015_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6b25c, data, tail8] + - [0x6b25c, data, tail9] - [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 28446e801..4a2f42602 100644 --- a/config/splat.ov_SC06_016.yaml +++ b/config/splat.ov_SC06_016.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_016_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_016_jr_8015A3C8] - [0x32cd4, c, ov_SC06_016_jr_8015AE2C] - [0x42a14, c, ov_SC06_016_jr_8016AB6C] - [0x4b364, c, ov_SC06_016_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x7504c, data, tail2] - [0x757a0, .rodata, ov_SC06_016_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x757d4, data, tail3] - - [0x75a3c, .rodata, ov_SC06_016_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a58, data, tail4] + - [0x7583c, .rodata, ov_SC06_016_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x758a8, data, tail4] + - [0x75a3c, .rodata, ov_SC06_016_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x75a58, data, tail5] - [0x75a5c, .rodata, ov_SC06_016_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75a78, data, tail5] + - [0x75a78, data, tail6] - [0x75ad0, .rodata, ov_SC06_016_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75af0, data, tail6] + - [0x75af0, data, tail7] - [0x75b70, .rodata, ov_SC06_016_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75b84, data, tail7] + - [0x75b84, data, tail8] - [0x75d2c, .rodata, ov_SC06_016_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x75ea4, data, tail8] + - [0x75ea4, data, tail9] - [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 10c02b1a0..23f9cb010 100644 --- a/config/splat.ov_SC06_018.yaml +++ b/config/splat.ov_SC06_018.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_018_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_018_jr_8015A3C8] - [0x32cd4, c, ov_SC06_018_jr_8015AE2C] - [0x42a14, c, ov_SC06_018_jr_8016AB6C] - [0x4b364, c, ov_SC06_018_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xaa8dc, data, tail2] - [0xab030, .rodata, ov_SC06_018_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xab064, data, tail3] - - [0xab2cc, .rodata, ov_SC06_018_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab2e8, data, tail4] + - [0xab0cc, .rodata, ov_SC06_018_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab138, data, tail4] + - [0xab2cc, .rodata, ov_SC06_018_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xab2e8, data, tail5] - [0xab2ec, .rodata, ov_SC06_018_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab308, data, tail5] + - [0xab308, data, tail6] - [0xab360, .rodata, ov_SC06_018_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab380, data, tail6] + - [0xab380, data, tail7] - [0xab400, .rodata, ov_SC06_018_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab414, data, tail7] + - [0xab414, data, tail8] - [0xab5bc, .rodata, ov_SC06_018_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xab734, data, tail8] + - [0xab734, data, tail9] - [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 ffa9c1393..8b795c044 100644 --- a/config/splat.ov_SC06_020.yaml +++ b/config/splat.ov_SC06_020.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_020_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_020_jr_8015A3C8] - [0x32cd4, c, ov_SC06_020_jr_8015AE2C] - [0x42a14, c, ov_SC06_020_jr_8016AB6C] - [0x4b364, c, ov_SC06_020_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x901c4, data, tail2] - [0x90918, .rodata, ov_SC06_020_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9094c, data, tail3] - - [0x90bb4, .rodata, ov_SC06_020_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bd0, data, tail4] + - [0x909b4, .rodata, ov_SC06_020_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90a20, data, tail4] + - [0x90bb4, .rodata, ov_SC06_020_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90bd0, data, tail5] - [0x90bd4, .rodata, ov_SC06_020_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90bf0, data, tail5] + - [0x90bf0, data, tail6] - [0x90c48, .rodata, ov_SC06_020_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90c68, data, tail6] + - [0x90c68, data, tail7] - [0x90ce8, .rodata, ov_SC06_020_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90cfc, data, tail7] + - [0x90cfc, data, tail8] - [0x90ea4, .rodata, ov_SC06_020_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9101c, data, tail8] + - [0x9101c, data, tail9] - [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 b4671e1df..804174ad3 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_022_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_022_jr_8015A3C8] - [0x32cd4, c, ov_SC06_022_jr_8015AE2C] - [0x42a14, c, ov_SC06_022_jr_8016AB6C] - [0x4b364, c, ov_SC06_022_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xb79d4, data, tail2] - [0xb8128, .rodata, ov_SC06_022_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb815c, data, tail3] - - [0xb83c4, .rodata, ov_SC06_022_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb83e0, data, tail4] + - [0xb81c4, .rodata, ov_SC06_022_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb8230, data, tail4] + - [0xb83c4, .rodata, ov_SC06_022_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb83e0, data, tail5] - [0xb83e4, .rodata, ov_SC06_022_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8400, data, tail5] + - [0xb8400, data, tail6] - [0xb8458, .rodata, ov_SC06_022_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb8478, data, tail6] + - [0xb8478, data, tail7] - [0xb84f8, .rodata, ov_SC06_022_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb850c, data, tail7] + - [0xb850c, data, tail8] - [0xb86b4, .rodata, ov_SC06_022_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb882c, data, tail8] + - [0xb882c, data, tail9] - [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 f7ce2afb2..82615e646 100644 --- a/config/splat.ov_SC06_024.yaml +++ b/config/splat.ov_SC06_024.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_024_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_024_jr_8015A3C8] - [0x32cd4, c, ov_SC06_024_jr_8015AE2C] - [0x42a14, c, ov_SC06_024_jr_8016AB6C] - [0x4b364, c, ov_SC06_024_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xb6b18, data, tail2] - [0xb726c, .rodata, ov_SC06_024_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb72a0, data, tail3] - - [0xb7508, .rodata, ov_SC06_024_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7524, data, tail4] + - [0xb7308, .rodata, ov_SC06_024_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7374, data, tail4] + - [0xb7508, .rodata, ov_SC06_024_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb7524, data, tail5] - [0xb7528, .rodata, ov_SC06_024_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7544, data, tail5] + - [0xb7544, data, tail6] - [0xb759c, .rodata, ov_SC06_024_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb75bc, data, tail6] + - [0xb75bc, data, tail7] - [0xb763c, .rodata, ov_SC06_024_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7650, data, tail7] + - [0xb7650, data, tail8] - [0xb77f8, .rodata, ov_SC06_024_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb7970, data, tail8] + - [0xb7970, data, tail9] - [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 ea5239b33..299fe37ed 100644 --- a/config/splat.ov_SC06_025.yaml +++ b/config/splat.ov_SC06_025.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_025_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_025_jr_8015A3C8] - [0x32cd4, c, ov_SC06_025_jr_8015AE2C] - [0x42a14, c, ov_SC06_025_jr_8016AB6C] - [0x4b364, c, ov_SC06_025_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x86e38, data, tail2] - [0x8758c, .rodata, ov_SC06_025_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x875c0, data, tail3] - - [0x87828, .rodata, ov_SC06_025_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87844, data, tail4] + - [0x87628, .rodata, ov_SC06_025_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87694, data, tail4] + - [0x87828, .rodata, ov_SC06_025_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x87844, data, tail5] - [0x87848, .rodata, ov_SC06_025_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87864, data, tail5] + - [0x87864, data, tail6] - [0x878bc, .rodata, ov_SC06_025_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x878dc, data, tail6] + - [0x878dc, data, tail7] - [0x8795c, .rodata, ov_SC06_025_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87970, data, tail7] + - [0x87970, data, tail8] - [0x87b18, .rodata, ov_SC06_025_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x87c90, data, tail8] + - [0x87c90, data, tail9] - [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 aed29f862..18059e647 100644 --- a/config/splat.ov_SC06_027.yaml +++ b/config/splat.ov_SC06_027.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_027_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_027_jr_8015A3C8] - [0x32cd4, c, ov_SC06_027_jr_8015AE2C] - [0x42a14, c, ov_SC06_027_jr_8016AB6C] - [0x4b364, c, ov_SC06_027_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x72e74, data, tail2] - [0x735c8, .rodata, ov_SC06_027_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x735fc, data, tail3] - - [0x73864, .rodata, ov_SC06_027_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73880, data, tail4] + - [0x73664, .rodata, ov_SC06_027_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x736d0, data, tail4] + - [0x73864, .rodata, ov_SC06_027_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x73880, data, tail5] - [0x73884, .rodata, ov_SC06_027_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x738a0, data, tail5] + - [0x738a0, data, tail6] - [0x738f8, .rodata, ov_SC06_027_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73918, data, tail6] + - [0x73918, data, tail7] - [0x73998, .rodata, ov_SC06_027_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x739ac, data, tail7] + - [0x739ac, data, tail8] - [0x73b54, .rodata, ov_SC06_027_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x73ccc, data, tail8] + - [0x73ccc, data, tail9] - [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 9cee7f98c..f6932305f 100644 --- a/config/splat.ov_SC06_029.yaml +++ b/config/splat.ov_SC06_029.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_029_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_029_jr_8015A3C8] - [0x32cd4, c, ov_SC06_029_jr_8015AE2C] - [0x42a14, c, ov_SC06_029_jr_8016AB6C] - [0x4b364, c, ov_SC06_029_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xb24f0, data, tail2] - [0xb2c44, .rodata, ov_SC06_029_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xb2c78, data, tail3] - - [0xb2ee0, .rodata, ov_SC06_029_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2efc, data, tail4] + - [0xb2ce0, .rodata, ov_SC06_029_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb2d4c, data, tail4] + - [0xb2ee0, .rodata, ov_SC06_029_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xb2efc, data, tail5] - [0xb2f00, .rodata, ov_SC06_029_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f1c, data, tail5] + - [0xb2f1c, data, tail6] - [0xb2f74, .rodata, ov_SC06_029_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb2f94, data, tail6] + - [0xb2f94, data, tail7] - [0xb3014, .rodata, ov_SC06_029_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3028, data, tail7] + - [0xb3028, data, tail8] - [0xb31d0, .rodata, ov_SC06_029_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xb3348, data, tail8] + - [0xb3348, data, tail9] - [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 8ef423bfd..5f5e02442 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_030_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_030_jr_8015A3C8] - [0x32cd4, c, ov_SC06_030_jr_8015AE2C] - [0x42a14, c, ov_SC06_030_jr_8016AB6C] - [0x4b364, c, ov_SC06_030_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8f854, data, tail2] - [0x8ffa8, .rodata, ov_SC06_030_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8ffdc, data, tail3] - - [0x90244, .rodata, ov_SC06_030_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90260, data, tail4] + - [0x90044, .rodata, ov_SC06_030_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x900b0, data, tail4] + - [0x90244, .rodata, ov_SC06_030_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x90260, data, tail5] - [0x90264, .rodata, ov_SC06_030_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x90280, data, tail5] + - [0x90280, data, tail6] - [0x902d8, .rodata, ov_SC06_030_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x902f8, data, tail6] + - [0x902f8, data, tail7] - [0x90378, .rodata, ov_SC06_030_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x9038c, data, tail7] + - [0x9038c, data, tail8] - [0x90534, .rodata, ov_SC06_030_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x906ac, data, tail8] + - [0x906ac, data, tail9] - [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 73e5c8364..2fdce2756 100644 --- a/config/splat.ov_SC06_032.yaml +++ b/config/splat.ov_SC06_032.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_032_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_032_jr_8015A3C8] - [0x32cd4, c, ov_SC06_032_jr_8015AE2C] - [0x42a14, c, ov_SC06_032_jr_8016AB6C] - [0x4b364, c, ov_SC06_032_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa5eb0, data, tail2] - [0xa6604, .rodata, ov_SC06_032_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa6638, data, tail3] - - [0xa68a0, .rodata, ov_SC06_032_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68bc, data, tail4] + - [0xa66a0, .rodata, ov_SC06_032_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa670c, data, tail4] + - [0xa68a0, .rodata, ov_SC06_032_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa68bc, data, tail5] - [0xa68c0, .rodata, ov_SC06_032_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa68dc, data, tail5] + - [0xa68dc, data, tail6] - [0xa6934, .rodata, ov_SC06_032_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6954, data, tail6] + - [0xa6954, data, tail7] - [0xa69d4, .rodata, ov_SC06_032_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa69e8, data, tail7] + - [0xa69e8, data, tail8] - [0xa6b90, .rodata, ov_SC06_032_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6d08, data, tail8] + - [0xa6d08, data, tail9] - [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 bdca75a6b..f68173300 100644 --- a/config/splat.ov_SC06_033.yaml +++ b/config/splat.ov_SC06_033.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC06_033_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC06_033_jr_8015A3C8] - [0x32cd4, c, ov_SC06_033_jr_8015AE2C] - [0x42a14, c, ov_SC06_033_jr_8016AB6C] - [0x4b364, c, ov_SC06_033_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa5f64, data, tail2] - [0xa66b8, .rodata, ov_SC06_033_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa66ec, data, tail3] - - [0xa6954, .rodata, ov_SC06_033_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6970, data, tail4] + - [0xa6754, .rodata, ov_SC06_033_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa67c0, data, tail4] + - [0xa6954, .rodata, ov_SC06_033_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa6970, data, tail5] - [0xa6974, .rodata, ov_SC06_033_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6990, data, tail5] + - [0xa6990, data, tail6] - [0xa69e8, .rodata, ov_SC06_033_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a08, data, tail6] + - [0xa6a08, data, tail7] - [0xa6a88, .rodata, ov_SC06_033_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6a9c, data, tail7] + - [0xa6a9c, data, tail8] - [0xa6c44, .rodata, ov_SC06_033_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6dbc, data, tail8] + - [0xa6dbc, data, tail9] - [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 b6d6ccf60..900a316d3 100644 --- a/config/splat.ov_SC07_000.yaml +++ b/config/splat.ov_SC07_000.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC07_000_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC07_000_jr_8015A3C8] - [0x32cd4, c, ov_SC07_000_jr_8015AE2C] - [0x42a14, c, ov_SC07_000_jr_8016AB6C] - [0x4b364, c, ov_SC07_000_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0xa55c0, data, tail2] - [0xa5d14, .rodata, ov_SC07_000_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa5d48, data, tail3] - - [0xa5fb0, .rodata, ov_SC07_000_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fcc, data, tail4] + - [0xa5db0, .rodata, ov_SC07_000_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa5e1c, data, tail4] + - [0xa5fb0, .rodata, ov_SC07_000_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa5fcc, data, tail5] - [0xa5fd0, .rodata, ov_SC07_000_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa5fec, data, tail5] + - [0xa5fec, data, tail6] - [0xa6044, .rodata, ov_SC07_000_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6064, data, tail6] + - [0xa6064, data, tail7] - [0xa60e4, .rodata, ov_SC07_000_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa60f8, data, tail7] + - [0xa60f8, data, tail8] - [0xa62a0, .rodata, ov_SC07_000_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa6418, data, tail8] + - [0xa6418, data, tail9] - [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 458e8521b..311898e13 100644 --- a/config/splat.ov_SC07_001.yaml +++ b/config/splat.ov_SC07_001.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC07_001_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC07_001_jr_8015A3C8] - [0x32cd4, c, ov_SC07_001_jr_8015AE2C] - [0x42a14, c, ov_SC07_001_jr_8016AB6C] - [0x4b364, c, ov_SC07_001_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x8075c, data, tail2] - [0x80eb0, .rodata, ov_SC07_001_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x80ee4, data, tail3] - - [0x8114c, .rodata, ov_SC07_001_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81168, data, tail4] + - [0x80f4c, .rodata, ov_SC07_001_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x80fb8, data, tail4] + - [0x8114c, .rodata, ov_SC07_001_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x81168, data, tail5] - [0x8116c, .rodata, ov_SC07_001_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81188, data, tail5] + - [0x81188, data, tail6] - [0x811e0, .rodata, ov_SC07_001_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81200, data, tail6] + - [0x81200, data, tail7] - [0x81280, .rodata, ov_SC07_001_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x81294, data, tail7] + - [0x81294, data, tail8] - [0x8143c, .rodata, ov_SC07_001_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x815b4, data, tail8] + - [0x815b4, data, tail9] - [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 7fd4adc1b..637b40bad 100644 --- a/config/splat.ov_SC07_002.yaml +++ b/config/splat.ov_SC07_002.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC07_002_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC07_002_jr_8015A3C8] - [0x32cd4, c, ov_SC07_002_jr_8015AE2C] - [0x42a14, c, ov_SC07_002_jr_8016AB6C] - [0x4b364, c, ov_SC07_002_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x71144, data, tail2] - [0x71898, .rodata, ov_SC07_002_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x718cc, data, tail3] - - [0x71b34, .rodata, ov_SC07_002_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b50, data, tail4] + - [0x71934, .rodata, ov_SC07_002_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x719a0, data, tail4] + - [0x71b34, .rodata, ov_SC07_002_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x71b50, data, tail5] - [0x71b54, .rodata, ov_SC07_002_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71b70, data, tail5] + - [0x71b70, data, tail6] - [0x71bc8, .rodata, ov_SC07_002_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71be8, data, tail6] + - [0x71be8, data, tail7] - [0x71c68, .rodata, ov_SC07_002_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71c7c, data, tail7] + - [0x71c7c, data, tail8] - [0x71e24, .rodata, ov_SC07_002_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x71f9c, data, tail8] + - [0x71f9c, data, tail9] - [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_008.yaml b/config/splat.ov_SC07_008.yaml index 969f652eb..19a607c33 100644 --- a/config/splat.ov_SC07_008.yaml +++ b/config/splat.ov_SC07_008.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC07_008_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC07_008_jr_8015A3C8] - [0x32cd4, c, ov_SC07_008_jr_8015AE2C] - [0x42a14, c, ov_SC07_008_jr_8016AB6C] - [0x4b364, c, ov_SC07_008_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x6c194, data, tail2] - [0x6c8e8, .rodata, ov_SC07_008_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x6c91c, data, tail3] - - [0x6cb84, .rodata, ov_SC07_008_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cba0, data, tail4] + - [0x6c984, .rodata, ov_SC07_008_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6c9f0, data, tail4] + - [0x6cb84, .rodata, ov_SC07_008_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x6cba0, data, tail5] - [0x6cba4, .rodata, ov_SC07_008_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cbc0, data, tail5] + - [0x6cbc0, data, tail6] - [0x6cc18, .rodata, ov_SC07_008_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cc38, data, tail6] + - [0x6cc38, data, tail7] - [0x6ccb8, .rodata, ov_SC07_008_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cccc, data, tail7] + - [0x6cccc, data, tail8] - [0x6ce74, .rodata, ov_SC07_008_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x6cfec, data, tail8] + - [0x6cfec, data, tail9] - [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 152d7d8d2..8e6b48e66 100644 --- a/config/splat.ov_SC07_009.yaml +++ b/config/splat.ov_SC07_009.yaml @@ -98,6 +98,8 @@ segments: - [0x17e80, c, ov_SC07_009_jr_8013FFD8] - [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] + - [0x32270, c, ov_SC07_009_jr_8015A3C8] - [0x32cd4, c, ov_SC07_009_jr_8015AE2C] - [0x42a14, c, ov_SC07_009_jr_8016AB6C] - [0x4b364, c, ov_SC07_009_jr_801734BC] @@ -107,16 +109,18 @@ segments: - [0x79820, data, tail2] - [0x79f74, .rodata, ov_SC07_009_jr_8013FFD8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x79fa8, data, tail3] - - [0x7a210, .rodata, ov_SC07_009_after] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a22c, data, tail4] + - [0x7a010, .rodata, ov_SC07_009_jr_8015444C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7a07c, data, tail4] + - [0x7a210, .rodata, ov_SC07_009_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x7a22c, data, tail5] - [0x7a230, .rodata, ov_SC07_009_jr_8015AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a24c, data, tail5] + - [0x7a24c, data, tail6] - [0x7a2a4, .rodata, ov_SC07_009_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a2c4, data, tail6] + - [0x7a2c4, data, tail7] - [0x7a344, .rodata, ov_SC07_009_jr_801734BC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a358, data, tail7] + - [0x7a358, data, tail8] - [0x7a500, .rodata, ov_SC07_009_jr_80178D40] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0x7a678, data, tail8] + - [0x7a678, data, tail9] - [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/src/ov_SC01_000/ov_SC01_000_after.c b/src/ov_SC01_000/ov_SC01_000_after.c index ec4db5521..2e0791f57 100644 --- a/src/ov_SC01_000/ov_SC01_000_after.c +++ b/src/ov_SC01_000/ov_SC01_000_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_000/nonmatchings/ov_SC01_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180A34[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180A34[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180A74[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180A74[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180A78[])(void); - -void func_80155580(void *a0) { - D_80180A78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180C6C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180C6C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180EDC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180EDC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180EDC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180EEC[])(void); - -void func_80157544(void *a0) { - D_80180EEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A45A8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A45A8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A45A8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180F14[])(void); -extern int D_801A45A8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180F14[*(unsigned short *)((char *)param_1 + 2)](); - D_801A45A8 = D_801A45A8 - 1; - if (D_801A45A8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180EF4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180EF4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180F04; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180F04); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180F54[])(void); - -void func_80157DC4(void *a0) { - D_80180F54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180F5C[])(void); - -void func_80157FC4(void *a0) { - D_80180F5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180F28; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180F28); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180F68[])(void); - -void func_8015824C(void *a0) { - D_80180F68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180F38; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180F38); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A45B0; -extern s32 D_801A45BC; -extern s32 D_801A45C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A45B0 = 0; - D_801A45BC = 1; - D_801A45C0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A45B0; -extern s32 D_801A45BC; -extern s32 D_801A45C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A45B0 = 0; - D_801A45BC = 1; - D_801A45C0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180FA4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180FA4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A45B0; - -void func_80158BB0(void *arg0) { - if (D_801A45B0 == 0) { - D_801A45B0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A45BC; -extern s32 D_80180F78[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A45BC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180F78[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A45C0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A45C0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A45B0; -extern s32 D_801A45B8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A45B0 == 4) { - D_801A45B0 = 5; - } - if (D_801A45B8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180FE0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180FE0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_801594E8); - - -extern void (*D_801811F4[])(void); - -void func_80159698(void *a0) { - D_801811F4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181014)); - func_80028620(1, &(*(u8 *)&D_80181014) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181014) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181298[])(void); - -void func_80159968(void *a0) { - D_80181298[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801813EC[])(void); - -void func_80159B70(void *a0) { - D_801813EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181208; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181208); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801813F4[])(void); - -void func_8015A264(void *a0) { - D_801813F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181218; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181218); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801812A4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u16 D_80181228[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801812A4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181228)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801812A4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181238 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181238; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181238); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801813FC[])(void); - -void func_8015AD3C(void *a0) { - D_801813FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8015444C.c b/src/ov_SC01_000/ov_SC01_000_jr_8015444C.c new file mode 100644 index 000000000..e8ef606ae --- /dev/null +++ b/src/ov_SC01_000/ov_SC01_000_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181140; +extern u8 D_801810B0; +extern u8 D_8018108C; +extern u8 D_80181068; +extern u8 D_8018111C; +extern u8 D_801810F8; +extern u8 D_801810D4; +extern u8 D_80181044; +extern void func_80145934(void); +extern u8 D_801811D0; +extern u8 D_801811AC; +extern u8 D_80181188; +extern u8 D_80181164; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801805C8[]; +extern unsigned char D_801805F8[]; +extern unsigned char D_80180648[]; +extern unsigned char D_80180678[]; +extern unsigned char D_801806A8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806F8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801807C0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180848[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180850; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4570; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A4574; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180880; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180928[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018094C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018093C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180960[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018096C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018097C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180994[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180984; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801809A8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801809C4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801809B4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801809D8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809EC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180A00; +extern void (*D_80180A28[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180A08; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180A34[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180A34[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180A74[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180A74[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180A78[])(void); + +void func_80155580(void *a0) { + D_80180A78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180C6C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180C6C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180EDC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EDC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180EDC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180EEC[])(void); + +void func_80157544(void *a0) { + D_80180EEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A45A8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A45A8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A45A8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180F14[])(void); +extern int D_801A45A8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180F14[*(unsigned short *)((char *)param_1 + 2)](); + D_801A45A8 = D_801A45A8 - 1; + if (D_801A45A8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EF4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180EF4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180F04; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180F04); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180F54[])(void); + +void func_80157DC4(void *a0) { + D_80180F54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180F5C[])(void); + +void func_80157FC4(void *a0) { + D_80180F5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180F28; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180F28); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180F68[])(void); + +void func_8015824C(void *a0) { + D_80180F68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180F38; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180F38); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A45B0; +extern s32 D_801A45BC; +extern s32 D_801A45C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A45B0 = 0; + D_801A45BC = 1; + D_801A45C0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A45B0; +extern s32 D_801A45BC; +extern s32 D_801A45C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A45B0 = 0; + D_801A45BC = 1; + D_801A45C0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180FA4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180FA4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A45B0; + +void func_80158BB0(void *arg0) { + if (D_801A45B0 == 0) { + D_801A45B0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A45BC; +extern s32 D_80180F78[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A45BC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180F78[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A45C0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A45C0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A45B0; +extern s32 D_801A45B8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A45B0 == 4) { + D_801A45B0 = 5; + } + if (D_801A45B8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180FE0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180FE0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_801594E8); + + +extern void (*D_801811F4[])(void); + +void func_80159698(void *a0) { + D_801811F4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181014)); + func_80028620(1, &(*(u8 *)&D_80181014) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181014) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181298[])(void); + +void func_80159968(void *a0) { + D_80181298[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801813EC[])(void); + +void func_80159B70(void *a0) { + D_801813EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181208; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181208); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801813F4[])(void); + +void func_8015A264(void *a0) { + D_801813F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181218; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181218); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_000/ov_SC01_000_jr_8015A3C8.c b/src/ov_SC01_000/ov_SC01_000_jr_8015A3C8.c new file mode 100644 index 000000000..c498e2cb4 --- /dev/null +++ b/src/ov_SC01_000/ov_SC01_000_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181140; +extern u8 D_801810B0; +extern u8 D_8018108C; +extern u8 D_80181068; +extern u8 D_8018111C; +extern u8 D_801810F8; +extern u8 D_801810D4; +extern u8 D_80181044; +extern void func_80145934(void); +extern u8 D_801811D0; +extern u8 D_801811AC; +extern u8 D_80181188; +extern u8 D_80181164; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801805C8[]; +extern unsigned char D_801805F8[]; +extern unsigned char D_80180648[]; +extern unsigned char D_80180678[]; +extern unsigned char D_801806A8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806F8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801807C0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180848[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180850; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4570; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A4574; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180880; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180928[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018094C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018093C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180960[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018096C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018097C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180994[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180984; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801809A8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801809C4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801809B4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801809D8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809EC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180A00; +extern void (*D_80180A28[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180A08; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180A74[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180A78[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EDC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180EEC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A45A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180F14[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EF4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180F04; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180F54[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180F5C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180F28; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180F68[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180F38; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A45B0; +extern s32 D_801A45BC; +extern s32 D_801A45C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180FA4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180F78[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A45B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801811F4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181014[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181298[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801813EC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181208; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801813F4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181218; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801812A4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80181228[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801812A4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181228)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801812A4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181238 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181238; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181238); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801813FC[])(void); + +void func_8015AD3C(void *a0) { + D_801813FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_001/ov_SC01_001_after.c b/src/ov_SC01_001/ov_SC01_001_after.c index 27361d375..79a0db8ad 100644 --- a/src/ov_SC01_001/ov_SC01_001_after.c +++ b/src/ov_SC01_001/ov_SC01_001_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_001/nonmatchings/ov_SC01_001_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80185684[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80185684[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801856C4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801856C4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801856C8[])(void); - -void func_80155580(void *a0) { - D_801856C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801858BC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801858BC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185B2C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80185B2C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80185B2C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80185B3C[])(void); - -void func_80157544(void *a0) { - D_80185B3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EC838; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EC838 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EC838 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80185B64[])(void); -extern int D_801EC838; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80185B64[*(unsigned short *)((char *)param_1 + 2)](); - D_801EC838 = D_801EC838 - 1; - if (D_801EC838 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80185B44; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185B44); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80185B54; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185B54); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80185BA4[])(void); - -void func_80157DC4(void *a0) { - D_80185BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80185BAC[])(void); - -void func_80157FC4(void *a0) { - D_80185BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80185B78; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80185B78); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80185BB8[])(void); - -void func_8015824C(void *a0) { - D_80185BB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80185B88; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185B88); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EC840; -extern s32 D_801EC84C; -extern s32 D_801EC850; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EC840 = 0; - D_801EC84C = 1; - D_801EC850 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EC840; -extern s32 D_801EC84C; -extern s32 D_801EC850; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EC840 = 0; - D_801EC84C = 1; - D_801EC850 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80185BF4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80185BF4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EC840; - -void func_80158BB0(void *arg0) { - if (D_801EC840 == 0) { - D_801EC840 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EC84C; -extern s32 D_80185BC8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EC84C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185BC8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EC850; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EC850 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EC840; -extern s32 D_801EC848; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EC840 == 4) { - D_801EC840 = 5; - } - if (D_801EC848 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80185C30[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80185C30; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_801594E8); - - -extern void (*D_80185E44[])(void); - -void func_80159698(void *a0) { - D_80185E44[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80185C64)); - func_80028620(1, &(*(u8 *)&D_80185C64) + 0x10); - func_80028620(2, &(*(u8 *)&D_80185C64) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185EE8[])(void); - -void func_80159968(void *a0) { - D_80185EE8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018603C[])(void); - -void func_80159B70(void *a0) { - D_8018603C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80185E58; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185E58); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80186044[])(void); - -void func_8015A264(void *a0) { - D_80186044[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80185E68; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185E68); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185EF4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_80185E78[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185EF4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185E78)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185EF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185E88 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80185E88; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80185E88); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018604C[])(void); - -void func_8015AD3C(void *a0) { - D_8018604C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8015444C.c b/src/ov_SC01_001/ov_SC01_001_jr_8015444C.c new file mode 100644 index 000000000..d585cd4c5 --- /dev/null +++ b/src/ov_SC01_001/ov_SC01_001_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185D90; +extern u8 D_80185D00; +extern u8 D_80185CDC; +extern u8 D_80185CB8; +extern u8 D_80185D6C; +extern u8 D_80185D48; +extern u8 D_80185D24; +extern u8 D_80185C94; +extern void func_80145934(void); +extern u8 D_80185E20; +extern u8 D_80185DFC; +extern u8 D_80185DD8; +extern u8 D_80185DB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185218[]; +extern unsigned char D_80185248[]; +extern unsigned char D_80185298[]; +extern unsigned char D_801852C8[]; +extern unsigned char D_801852F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185348[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185410[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185498[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801854A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EC800; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EC804; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801854D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185578[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018559C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018558C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801855B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801855BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801855CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801855E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801855D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801855F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185614[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185604; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185628[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018563C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185650; +extern void (*D_80185678[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185658; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80185684[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80185684[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801856C4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801856C4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801856C8[])(void); + +void func_80155580(void *a0) { + D_801856C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801858BC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801858BC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185B2C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B2C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80185B2C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80185B3C[])(void); + +void func_80157544(void *a0) { + D_80185B3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EC838; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EC838 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EC838 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80185B64[])(void); +extern int D_801EC838; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80185B64[*(unsigned short *)((char *)param_1 + 2)](); + D_801EC838 = D_801EC838 - 1; + if (D_801EC838 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185B44; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185B44); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80185B54; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185B54); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80185BA4[])(void); + +void func_80157DC4(void *a0) { + D_80185BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80185BAC[])(void); + +void func_80157FC4(void *a0) { + D_80185BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80185B78; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80185B78); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80185BB8[])(void); + +void func_8015824C(void *a0) { + D_80185BB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80185B88; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185B88); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EC840; +extern s32 D_801EC84C; +extern s32 D_801EC850; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EC840 = 0; + D_801EC84C = 1; + D_801EC850 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EC840; +extern s32 D_801EC84C; +extern s32 D_801EC850; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EC840 = 0; + D_801EC84C = 1; + D_801EC850 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80185BF4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80185BF4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EC840; + +void func_80158BB0(void *arg0) { + if (D_801EC840 == 0) { + D_801EC840 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EC84C; +extern s32 D_80185BC8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EC84C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185BC8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EC850; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EC850 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EC840; +extern s32 D_801EC848; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EC840 == 4) { + D_801EC840 = 5; + } + if (D_801EC848 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80185C30[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80185C30; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_801594E8); + + +extern void (*D_80185E44[])(void); + +void func_80159698(void *a0) { + D_80185E44[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80185C64)); + func_80028620(1, &(*(u8 *)&D_80185C64) + 0x10); + func_80028620(2, &(*(u8 *)&D_80185C64) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185EE8[])(void); + +void func_80159968(void *a0) { + D_80185EE8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018603C[])(void); + +void func_80159B70(void *a0) { + D_8018603C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80185E58; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185E58); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80186044[])(void); + +void func_8015A264(void *a0) { + D_80186044[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80185E68; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185E68); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_001/ov_SC01_001_jr_8015A3C8.c b/src/ov_SC01_001/ov_SC01_001_jr_8015A3C8.c new file mode 100644 index 000000000..66b37722d --- /dev/null +++ b/src/ov_SC01_001/ov_SC01_001_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185D90; +extern u8 D_80185D00; +extern u8 D_80185CDC; +extern u8 D_80185CB8; +extern u8 D_80185D6C; +extern u8 D_80185D48; +extern u8 D_80185D24; +extern u8 D_80185C94; +extern void func_80145934(void); +extern u8 D_80185E20; +extern u8 D_80185DFC; +extern u8 D_80185DD8; +extern u8 D_80185DB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185218[]; +extern unsigned char D_80185248[]; +extern unsigned char D_80185298[]; +extern unsigned char D_801852C8[]; +extern unsigned char D_801852F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185348[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185410[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185498[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801854A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EC800; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EC804; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801854D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185578[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018559C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018558C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801855B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801855BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801855CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801855E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801855D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801855F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185614[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185604; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185628[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018563C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185650; +extern void (*D_80185678[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185658; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801856C4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801856C8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B2C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185B3C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EC838; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185B64[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185B44; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185B54; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185BA4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185BAC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185B78; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185BB8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185B88; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EC840; +extern s32 D_801EC84C; +extern s32 D_801EC850; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185BF4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185BC8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EC848; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185E44[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185C64[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185EE8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018603C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185E58; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186044[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185E68; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185EF4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80185E78[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185EF4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185E78)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185EF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185E88 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185E88; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80185E88); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018604C[])(void); + +void func_8015AD3C(void *a0) { + D_8018604C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_004/ov_SC01_004_after.c b/src/ov_SC01_004/ov_SC01_004_after.c index 07e2bab7a..da48585dd 100644 --- a/src/ov_SC01_004/ov_SC01_004_after.c +++ b/src/ov_SC01_004/ov_SC01_004_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_004/nonmatchings/ov_SC01_004_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80181048[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80181048[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181088[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181088[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018108C[])(void); - -void func_80155580(void *a0) { - D_8018108C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181280[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181280[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801814F0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801814F0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801814F0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80181500[])(void); - -void func_80157544(void *a0) { - D_80181500[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018EFA0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018EFA0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018EFA0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181528[])(void); -extern int D_8018EFA0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181528[*(unsigned short *)((char *)param_1 + 2)](); - D_8018EFA0 = D_8018EFA0 - 1; - if (D_8018EFA0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181508; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181508); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181518; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181518); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181568[])(void); - -void func_80157DC4(void *a0) { - D_80181568[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181570[])(void); - -void func_80157FC4(void *a0) { - D_80181570[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018153C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018153C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018157C[])(void); - -void func_8015824C(void *a0) { - D_8018157C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018154C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018154C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018EFA8; -extern s32 D_8018EFB4; -extern s32 D_8018EFB8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018EFA8 = 0; - D_8018EFB4 = 1; - D_8018EFB8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018EFA8; -extern s32 D_8018EFB4; -extern s32 D_8018EFB8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018EFA8 = 0; - D_8018EFB4 = 1; - D_8018EFB8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801815B8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801815B8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018EFA8; - -void func_80158BB0(void *arg0) { - if (D_8018EFA8 == 0) { - D_8018EFA8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018EFB4; -extern s32 D_8018158C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018EFB4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018158C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018EFB8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018EFB8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018EFA8; -extern s32 D_8018EFB0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018EFA8 == 4) { - D_8018EFA8 = 5; - } - if (D_8018EFB0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801815F4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801815F4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_801594E8); - - -extern void (*D_80181808[])(void); - -void func_80159698(void *a0) { - D_80181808[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181628)); - func_80028620(1, &(*(u8 *)&D_80181628) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181628) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801818AC[])(void); - -void func_80159968(void *a0) { - D_801818AC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181A00[])(void); - -void func_80159B70(void *a0) { - D_80181A00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018181C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018181C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181A08[])(void); - -void func_8015A264(void *a0) { - D_80181A08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018182C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018182C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801818B8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_8018183C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801818B8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018183C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801818B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018184C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018184C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018184C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181A10[])(void); - -void func_8015AD3C(void *a0) { - D_80181A10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8015444C.c b/src/ov_SC01_004/ov_SC01_004_jr_8015444C.c new file mode 100644 index 000000000..faec5186f --- /dev/null +++ b/src/ov_SC01_004/ov_SC01_004_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181754; +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181730; +extern u8 D_8018170C; +extern u8 D_801816E8; +extern u8 D_80181658; +extern void func_80145934(void); +extern u8 D_801817E4; +extern u8 D_801817C0; +extern u8 D_8018179C; +extern u8 D_80181778; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180BDC[]; +extern unsigned char D_80180C0C[]; +extern unsigned char D_80180C5C[]; +extern unsigned char D_80180C8C[]; +extern unsigned char D_80180CBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180DD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180E5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180E64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EF68; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EF6C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180E94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180F60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180F50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180F74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180F80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180F90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180FA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180F98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180FBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180FD8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180FC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180FEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181000[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181014; +extern void (*D_8018103C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018101C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80181048[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80181048[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181088[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181088[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018108C[])(void); + +void func_80155580(void *a0) { + D_8018108C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181280[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181280[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801814F0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801814F0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801814F0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80181500[])(void); + +void func_80157544(void *a0) { + D_80181500[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018EFA0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018EFA0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018EFA0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181528[])(void); +extern int D_8018EFA0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181528[*(unsigned short *)((char *)param_1 + 2)](); + D_8018EFA0 = D_8018EFA0 - 1; + if (D_8018EFA0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181508; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181508); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181518; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181518); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181568[])(void); + +void func_80157DC4(void *a0) { + D_80181568[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181570[])(void); + +void func_80157FC4(void *a0) { + D_80181570[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018153C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018153C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018157C[])(void); + +void func_8015824C(void *a0) { + D_8018157C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018154C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018154C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018EFA8; +extern s32 D_8018EFB4; +extern s32 D_8018EFB8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018EFA8 = 0; + D_8018EFB4 = 1; + D_8018EFB8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018EFA8; +extern s32 D_8018EFB4; +extern s32 D_8018EFB8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018EFA8 = 0; + D_8018EFB4 = 1; + D_8018EFB8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801815B8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801815B8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018EFA8; + +void func_80158BB0(void *arg0) { + if (D_8018EFA8 == 0) { + D_8018EFA8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018EFB4; +extern s32 D_8018158C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018EFB4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018158C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018EFB8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018EFB8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EFA8; +extern s32 D_8018EFB0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018EFA8 == 4) { + D_8018EFA8 = 5; + } + if (D_8018EFB0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801815F4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801815F4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_801594E8); + + +extern void (*D_80181808[])(void); + +void func_80159698(void *a0) { + D_80181808[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181628)); + func_80028620(1, &(*(u8 *)&D_80181628) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181628) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801818AC[])(void); + +void func_80159968(void *a0) { + D_801818AC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181A00[])(void); + +void func_80159B70(void *a0) { + D_80181A00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018181C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018181C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181A08[])(void); + +void func_8015A264(void *a0) { + D_80181A08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018182C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018182C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_004/ov_SC01_004_jr_8015A3C8.c b/src/ov_SC01_004/ov_SC01_004_jr_8015A3C8.c new file mode 100644 index 000000000..8875fade1 --- /dev/null +++ b/src/ov_SC01_004/ov_SC01_004_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181754; +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181730; +extern u8 D_8018170C; +extern u8 D_801816E8; +extern u8 D_80181658; +extern void func_80145934(void); +extern u8 D_801817E4; +extern u8 D_801817C0; +extern u8 D_8018179C; +extern u8 D_80181778; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180BDC[]; +extern unsigned char D_80180C0C[]; +extern unsigned char D_80180C5C[]; +extern unsigned char D_80180C8C[]; +extern unsigned char D_80180CBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180DD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180E5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180E64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EF68; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EF6C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180E94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180F60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180F50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180F74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180F80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180F90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180FA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180F98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180FBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180FD8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180FC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180FEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181000[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181014; +extern void (*D_8018103C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018101C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181088[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018108C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801814F0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181500[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018EFA0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181528[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181508; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181518; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181568[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181570[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018153C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018157C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018154C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018EFA8; +extern s32 D_8018EFB4; +extern s32 D_8018EFB8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801815B8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018158C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EFB0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181808[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181628[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801818AC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A00[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018181C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A08[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018182C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801818B8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_8018183C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801818B8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018183C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801818B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018184C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018184C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018184C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181A10[])(void); + +void func_8015AD3C(void *a0) { + D_80181A10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_005/ov_SC01_005_after.c b/src/ov_SC01_005/ov_SC01_005_after.c index 41c4838e1..92178a698 100644 --- a/src/ov_SC01_005/ov_SC01_005_after.c +++ b/src/ov_SC01_005/ov_SC01_005_after.c @@ -2617,1415 +2617,3 @@ 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_SC01_005/nonmatchings/ov_SC01_005_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801841DC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801841DC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018421C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018421C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80184220[])(void); - -void func_80155580(void *a0) { - D_80184220[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80184414[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80184414[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184684 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184684[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184684[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184694[])(void); - -void func_80157544(void *a0) { - D_80184694[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CC700; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CC700 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CC700 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801846BC[])(void); -extern int D_801CC700; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801846BC[*(unsigned short *)((char *)param_1 + 2)](); - D_801CC700 = D_801CC700 - 1; - if (D_801CC700 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018469C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018469C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801846AC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801846AC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801846FC[])(void); - -void func_80157DC4(void *a0) { - D_801846FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184704[])(void); - -void func_80157FC4(void *a0) { - D_80184704[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801846D0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801846D0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80184710[])(void); - -void func_8015824C(void *a0) { - D_80184710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801846E0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801846E0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CC708; -extern s32 D_801CC714; -extern s32 D_801CC718; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CC708 = 0; - D_801CC714 = 1; - D_801CC718 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CC708; -extern s32 D_801CC714; -extern s32 D_801CC718; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CC708 = 0; - D_801CC714 = 1; - D_801CC718 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018474C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018474C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CC708; - -void func_80158BB0(void *arg0) { - if (D_801CC708 == 0) { - D_801CC708 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CC714; -extern s32 D_80184720[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CC714; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184720[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CC718; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CC718 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CC708; -extern s32 D_801CC710; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CC708 == 4) { - D_801CC708 = 5; - } - if (D_801CC710 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184788[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184788; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_801594E8); - - -extern void (*D_8018499C[])(void); - -void func_80159698(void *a0) { - D_8018499C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801847BC)); - func_80028620(1, &(*(u8 *)&D_801847BC) + 0x10); - func_80028620(2, &(*(u8 *)&D_801847BC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184A40[])(void); - -void func_80159968(void *a0) { - D_80184A40[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184B94[])(void); - -void func_80159B70(void *a0) { - D_80184B94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801849B0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801849B0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184B9C[])(void); - -void func_8015A264(void *a0) { - D_80184B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801849C0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801849C0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184A4C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_801849D0[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184A4C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801849E0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801849E0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801849E0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184BA4[])(void); - -void func_8015AD3C(void *a0) { - D_80184BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8015444C.c b/src/ov_SC01_005/ov_SC01_005_jr_8015444C.c new file mode 100644 index 000000000..d07589501 --- /dev/null +++ b/src/ov_SC01_005/ov_SC01_005_jr_8015444C.c @@ -0,0 +1,2293 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801841DC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801841DC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018421C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018421C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80184220[])(void); + +void func_80155580(void *a0) { + D_80184220[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80184414[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80184414[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184684 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184684[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184694[])(void); + +void func_80157544(void *a0) { + D_80184694[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CC700; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CC700 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CC700 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801846BC[])(void); +extern int D_801CC700; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801846BC[*(unsigned short *)((char *)param_1 + 2)](); + D_801CC700 = D_801CC700 - 1; + if (D_801CC700 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018469C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801846AC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801846FC[])(void); + +void func_80157DC4(void *a0) { + D_801846FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184704[])(void); + +void func_80157FC4(void *a0) { + D_80184704[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801846D0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801846D0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80184710[])(void); + +void func_8015824C(void *a0) { + D_80184710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801846E0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801846E0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CC708 = 0; + D_801CC714 = 1; + D_801CC718 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CC708 = 0; + D_801CC714 = 1; + D_801CC718 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018474C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018474C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CC708; + +void func_80158BB0(void *arg0) { + if (D_801CC708 == 0) { + D_801CC708 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CC714; +extern s32 D_80184720[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CC714; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184720[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CC718; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CC718 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC708; +extern s32 D_801CC710; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CC708 == 4) { + D_801CC708 = 5; + } + if (D_801CC710 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184788[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184788; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_801594E8); + + +extern void (*D_8018499C[])(void); + +void func_80159698(void *a0) { + D_8018499C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801847BC)); + func_80028620(1, &(*(u8 *)&D_801847BC) + 0x10); + func_80028620(2, &(*(u8 *)&D_801847BC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184A40[])(void); + +void func_80159968(void *a0) { + D_80184A40[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184B94[])(void); + +void func_80159B70(void *a0) { + D_80184B94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801849B0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801849B0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184B9C[])(void); + +void func_8015A264(void *a0) { + D_80184B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801849C0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801849C0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_005/ov_SC01_005_jr_8015A3C8.c b/src/ov_SC01_005/ov_SC01_005_jr_8015A3C8.c new file mode 100644 index 000000000..403889a04 --- /dev/null +++ b/src/ov_SC01_005/ov_SC01_005_jr_8015A3C8.c @@ -0,0 +1,1500 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018421C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184220[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184694[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CC700; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801846BC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846FC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184704[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801846D0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184710[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801846E0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018474C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184720[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC710; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018499C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801847BC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184A40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B94[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801849B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B9C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801849C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801849D0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801849E0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801849E0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801849E0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184BA4[])(void); + +void func_8015AD3C(void *a0) { + D_80184BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_006/ov_SC01_006_after.c b/src/ov_SC01_006/ov_SC01_006_after.c index fe4962721..87bbfd451 100644 --- a/src/ov_SC01_006/ov_SC01_006_after.c +++ b/src/ov_SC01_006/ov_SC01_006_after.c @@ -2617,1415 +2617,3 @@ 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_SC01_006/nonmatchings/ov_SC01_006_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801841DC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801841DC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018421C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018421C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80184220[])(void); - -void func_80155580(void *a0) { - D_80184220[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80184414[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80184414[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184684 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184684[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184684[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184694[])(void); - -void func_80157544(void *a0) { - D_80184694[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CC700; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CC700 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CC700 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801846BC[])(void); -extern int D_801CC700; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801846BC[*(unsigned short *)((char *)param_1 + 2)](); - D_801CC700 = D_801CC700 - 1; - if (D_801CC700 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018469C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018469C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801846AC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801846AC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801846FC[])(void); - -void func_80157DC4(void *a0) { - D_801846FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184704[])(void); - -void func_80157FC4(void *a0) { - D_80184704[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801846D0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801846D0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80184710[])(void); - -void func_8015824C(void *a0) { - D_80184710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801846E0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801846E0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CC708; -extern s32 D_801CC714; -extern s32 D_801CC718; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CC708 = 0; - D_801CC714 = 1; - D_801CC718 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CC708; -extern s32 D_801CC714; -extern s32 D_801CC718; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CC708 = 0; - D_801CC714 = 1; - D_801CC718 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018474C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018474C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CC708; - -void func_80158BB0(void *arg0) { - if (D_801CC708 == 0) { - D_801CC708 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CC714; -extern s32 D_80184720[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CC714; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184720[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CC718; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CC718 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CC708; -extern s32 D_801CC710; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CC708 == 4) { - D_801CC708 = 5; - } - if (D_801CC710 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184788[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184788; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_801594E8); - - -extern void (*D_8018499C[])(void); - -void func_80159698(void *a0) { - D_8018499C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801847BC)); - func_80028620(1, &(*(u8 *)&D_801847BC) + 0x10); - func_80028620(2, &(*(u8 *)&D_801847BC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184A40[])(void); - -void func_80159968(void *a0) { - D_80184A40[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184B94[])(void); - -void func_80159B70(void *a0) { - D_80184B94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801849B0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801849B0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184B9C[])(void); - -void func_8015A264(void *a0) { - D_80184B9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801849C0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801849C0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184A4C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_801849D0[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184A4C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184A4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801849E0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801849E0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801849E0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184BA4[])(void); - -void func_8015AD3C(void *a0) { - D_80184BA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8015444C.c b/src/ov_SC01_006/ov_SC01_006_jr_8015444C.c new file mode 100644 index 000000000..cfce32053 --- /dev/null +++ b/src/ov_SC01_006/ov_SC01_006_jr_8015444C.c @@ -0,0 +1,2293 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801841DC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801841DC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018421C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018421C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80184220[])(void); + +void func_80155580(void *a0) { + D_80184220[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80184414[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80184414[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184684 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184684[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184694[])(void); + +void func_80157544(void *a0) { + D_80184694[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CC700; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CC700 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CC700 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801846BC[])(void); +extern int D_801CC700; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801846BC[*(unsigned short *)((char *)param_1 + 2)](); + D_801CC700 = D_801CC700 - 1; + if (D_801CC700 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018469C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801846AC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801846FC[])(void); + +void func_80157DC4(void *a0) { + D_801846FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184704[])(void); + +void func_80157FC4(void *a0) { + D_80184704[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801846D0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801846D0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80184710[])(void); + +void func_8015824C(void *a0) { + D_80184710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801846E0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801846E0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CC708 = 0; + D_801CC714 = 1; + D_801CC718 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CC708 = 0; + D_801CC714 = 1; + D_801CC718 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018474C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018474C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CC708; + +void func_80158BB0(void *arg0) { + if (D_801CC708 == 0) { + D_801CC708 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CC714; +extern s32 D_80184720[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CC714; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184720[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CC718; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CC718 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC708; +extern s32 D_801CC710; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CC708 == 4) { + D_801CC708 = 5; + } + if (D_801CC710 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184788[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184788; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_801594E8); + + +extern void (*D_8018499C[])(void); + +void func_80159698(void *a0) { + D_8018499C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801847BC)); + func_80028620(1, &(*(u8 *)&D_801847BC) + 0x10); + func_80028620(2, &(*(u8 *)&D_801847BC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184A40[])(void); + +void func_80159968(void *a0) { + D_80184A40[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184B94[])(void); + +void func_80159B70(void *a0) { + D_80184B94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801849B0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801849B0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184B9C[])(void); + +void func_8015A264(void *a0) { + D_80184B9C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801849C0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801849C0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8015A3C8.c b/src/ov_SC01_006/ov_SC01_006_jr_8015A3C8.c new file mode 100644 index 000000000..403889a04 --- /dev/null +++ b/src/ov_SC01_006/ov_SC01_006_jr_8015A3C8.c @@ -0,0 +1,1500 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848E8; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_80184810; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_8018487C; +extern u8 D_801847EC; +extern void func_80145934(void); +extern u8 D_80184978; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D70[]; +extern unsigned char D_80183DA0[]; +extern unsigned char D_80183DF0[]; +extern unsigned char D_80183E20[]; +extern unsigned char D_80183E50[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183EA0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F68[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FF0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FF8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CC6C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CC6CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184028; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801840D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801840E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184114[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184124[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018413C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018412C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184150[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018416C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018415C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184180[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184194[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801841A8; +extern void (*D_801841D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801841B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018421C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184220[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184684[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184694[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CC700; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801846BC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018469C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801846AC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846FC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184704[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801846D0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184710[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801846E0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CC708; +extern s32 D_801CC714; +extern s32 D_801CC718; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018474C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184720[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CC710; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018499C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801847BC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184A40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B94[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801849B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B9C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801849C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801849D0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801849D0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801849E0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801849E0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801849E0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184BA4[])(void); + +void func_8015AD3C(void *a0) { + D_80184BA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_008/ov_SC01_008_after.c b/src/ov_SC01_008/ov_SC01_008_after.c index 96e42079a..246e4f993 100644 --- a/src/ov_SC01_008/ov_SC01_008_after.c +++ b/src/ov_SC01_008/ov_SC01_008_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_008/nonmatchings/ov_SC01_008_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801815BC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801815BC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801815FC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801815FC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181600[])(void); - -void func_80155580(void *a0) { - D_80181600[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801817F4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801817F4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181A64 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80181A64[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80181A64[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80181A74[])(void); - -void func_80157544(void *a0) { - D_80181A74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A21B0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A21B0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A21B0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181A9C[])(void); -extern int D_801A21B0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181A9C[*(unsigned short *)((char *)param_1 + 2)](); - D_801A21B0 = D_801A21B0 - 1; - if (D_801A21B0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181A7C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181A7C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181A8C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181A8C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181ADC[])(void); - -void func_80157DC4(void *a0) { - D_80181ADC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181AE4[])(void); - -void func_80157FC4(void *a0) { - D_80181AE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181AB0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181AB0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80181AF0[])(void); - -void func_8015824C(void *a0) { - D_80181AF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80181AC0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181AC0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A21B8; -extern s32 D_801A21C4; -extern s32 D_801A21C8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A21B8 = 0; - D_801A21C4 = 1; - D_801A21C8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A21B8; -extern s32 D_801A21C4; -extern s32 D_801A21C8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A21B8 = 0; - D_801A21C4 = 1; - D_801A21C8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181B2C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181B2C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A21B8; - -void func_80158BB0(void *arg0) { - if (D_801A21B8 == 0) { - D_801A21B8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A21C4; -extern s32 D_80181B00[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A21C4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181B00[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A21C8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A21C8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A21B8; -extern s32 D_801A21C0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A21B8 == 4) { - D_801A21B8 = 5; - } - if (D_801A21C0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181B68[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181B68; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_801594E8); - - -extern void (*D_80181D7C[])(void); - -void func_80159698(void *a0) { - D_80181D7C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181B9C)); - func_80028620(1, &(*(u8 *)&D_80181B9C) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181B9C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181E20[])(void); - -void func_80159968(void *a0) { - D_80181E20[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181F74[])(void); - -void func_80159B70(void *a0) { - D_80181F74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181D90; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181D90); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181F7C[])(void); - -void func_8015A264(void *a0) { - D_80181F7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181DA0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181DA0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181E2C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80181DB0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181E2C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181DB0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181E2C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181DC0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181DC0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181DC0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181F84[])(void); - -void func_8015AD3C(void *a0) { - D_80181F84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8015444C.c b/src/ov_SC01_008/ov_SC01_008_jr_8015444C.c new file mode 100644 index 000000000..f20273086 --- /dev/null +++ b/src/ov_SC01_008/ov_SC01_008_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181CC8; +extern u8 D_80181C38; +extern u8 D_80181C14; +extern u8 D_80181BF0; +extern u8 D_80181CA4; +extern u8 D_80181C80; +extern u8 D_80181C5C; +extern u8 D_80181BCC; +extern void func_80145934(void); +extern u8 D_80181D58; +extern u8 D_80181D34; +extern u8 D_80181D10; +extern u8 D_80181CEC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181150[]; +extern unsigned char D_80181180[]; +extern unsigned char D_801811D0[]; +extern unsigned char D_80181200[]; +extern unsigned char D_80181230[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181280[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181348[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801813D0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801813D8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2178; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A217C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181408; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801814B0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801814D4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801814C4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801814E8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801814F4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181504[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018151C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018150C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181530[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018154C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018153C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181560[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181574[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181588; +extern void (*D_801815B0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181590; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801815BC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801815BC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801815FC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801815FC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181600[])(void); + +void func_80155580(void *a0) { + D_80181600[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801817F4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801817F4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181A64 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80181A64[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80181A64[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80181A74[])(void); + +void func_80157544(void *a0) { + D_80181A74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A21B0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A21B0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A21B0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181A9C[])(void); +extern int D_801A21B0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181A9C[*(unsigned short *)((char *)param_1 + 2)](); + D_801A21B0 = D_801A21B0 - 1; + if (D_801A21B0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181A7C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181A7C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181A8C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181A8C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181ADC[])(void); + +void func_80157DC4(void *a0) { + D_80181ADC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181AE4[])(void); + +void func_80157FC4(void *a0) { + D_80181AE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181AB0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181AB0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80181AF0[])(void); + +void func_8015824C(void *a0) { + D_80181AF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80181AC0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181AC0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A21B8; +extern s32 D_801A21C4; +extern s32 D_801A21C8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A21B8 = 0; + D_801A21C4 = 1; + D_801A21C8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A21B8; +extern s32 D_801A21C4; +extern s32 D_801A21C8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A21B8 = 0; + D_801A21C4 = 1; + D_801A21C8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181B2C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181B2C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A21B8; + +void func_80158BB0(void *arg0) { + if (D_801A21B8 == 0) { + D_801A21B8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A21C4; +extern s32 D_80181B00[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A21C4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181B00[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A21C8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A21C8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A21B8; +extern s32 D_801A21C0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A21B8 == 4) { + D_801A21B8 = 5; + } + if (D_801A21C0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181B68[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181B68; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_801594E8); + + +extern void (*D_80181D7C[])(void); + +void func_80159698(void *a0) { + D_80181D7C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181B9C)); + func_80028620(1, &(*(u8 *)&D_80181B9C) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181B9C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181E20[])(void); + +void func_80159968(void *a0) { + D_80181E20[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181F74[])(void); + +void func_80159B70(void *a0) { + D_80181F74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181D90; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181D90); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181F7C[])(void); + +void func_8015A264(void *a0) { + D_80181F7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181DA0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181DA0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_008/ov_SC01_008_jr_8015A3C8.c b/src/ov_SC01_008/ov_SC01_008_jr_8015A3C8.c new file mode 100644 index 000000000..109259f28 --- /dev/null +++ b/src/ov_SC01_008/ov_SC01_008_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181CC8; +extern u8 D_80181C38; +extern u8 D_80181C14; +extern u8 D_80181BF0; +extern u8 D_80181CA4; +extern u8 D_80181C80; +extern u8 D_80181C5C; +extern u8 D_80181BCC; +extern void func_80145934(void); +extern u8 D_80181D58; +extern u8 D_80181D34; +extern u8 D_80181D10; +extern u8 D_80181CEC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181150[]; +extern unsigned char D_80181180[]; +extern unsigned char D_801811D0[]; +extern unsigned char D_80181200[]; +extern unsigned char D_80181230[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181280[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181348[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801813D0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801813D8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2178; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A217C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181408; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801814B0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801814D4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801814C4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801814E8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801814F4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181504[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018151C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018150C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181530[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018154C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018153C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181560[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181574[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181588; +extern void (*D_801815B0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181590; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801815FC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181600[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181A64[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181A74[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A21B0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181A9C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181A7C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181A8C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181ADC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181AE4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181AB0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181AF0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181AC0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A21B8; +extern s32 D_801A21C4; +extern s32 D_801A21C8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181B2C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181B00[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A21C0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181D7C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181B9C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181E20[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181F74[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181D90; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181F7C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181DA0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181E2C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181DB0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181E2C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181DB0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181E2C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181DC0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181DC0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181DC0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181F84[])(void); + +void func_8015AD3C(void *a0) { + D_80181F84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_009/ov_SC01_009_after.c b/src/ov_SC01_009/ov_SC01_009_after.c index f625274cb..54a4acce8 100644 --- a/src/ov_SC01_009/ov_SC01_009_after.c +++ b/src/ov_SC01_009/ov_SC01_009_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_009/nonmatchings/ov_SC01_009_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801847A4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801847A4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801847E4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801847E4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801847E8[])(void); - -void func_80155580(void *a0) { - D_801847E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801849DC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801849DC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184C4C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184C4C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184C4C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184C5C[])(void); - -void func_80157544(void *a0) { - D_80184C5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801F2010; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801F2010 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801F2010 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184C84[])(void); -extern int D_801F2010; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184C84[*(unsigned short *)((char *)param_1 + 2)](); - D_801F2010 = D_801F2010 - 1; - if (D_801F2010 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184C64; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184C64); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184C74; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184C74); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80184CC4[])(void); - -void func_80157DC4(void *a0) { - D_80184CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184CCC[])(void); - -void func_80157FC4(void *a0) { - D_80184CCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184C98; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184C98); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80184CD8[])(void); - -void func_8015824C(void *a0) { - D_80184CD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184CA8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184CA8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801F2018; -extern s32 D_801F2024; -extern s32 D_801F2028; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801F2018 = 0; - D_801F2024 = 1; - D_801F2028 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801F2018; -extern s32 D_801F2024; -extern s32 D_801F2028; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801F2018 = 0; - D_801F2024 = 1; - D_801F2028 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184D14[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184D14[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801F2018; - -void func_80158BB0(void *arg0) { - if (D_801F2018 == 0) { - D_801F2018 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801F2024; -extern s32 D_80184CE8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801F2024; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184CE8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801F2028; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801F2028 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801F2018; -extern s32 D_801F2020; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801F2018 == 4) { - D_801F2018 = 5; - } - if (D_801F2020 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184D50[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184D50; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_801594E8); - - -extern void (*D_80184F64[])(void); - -void func_80159698(void *a0) { - D_80184F64[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184D84)); - func_80028620(1, &(*(u8 *)&D_80184D84) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184D84) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185008[])(void); - -void func_80159968(void *a0) { - D_80185008[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018515C[])(void); - -void func_80159B70(void *a0) { - D_8018515C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184F78; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184F78); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80185164[])(void); - -void func_8015A264(void *a0) { - D_80185164[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184F88; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184F88); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185014[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s8 D_80184F98[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185014[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184F98)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185014[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184FA8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184FA8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184FA8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018516C[])(void); - -void func_8015AD3C(void *a0) { - D_8018516C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8015444C.c b/src/ov_SC01_009/ov_SC01_009_jr_8015444C.c new file mode 100644 index 000000000..96fdd410a --- /dev/null +++ b/src/ov_SC01_009/ov_SC01_009_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EB0; +extern u8 D_80184E20; +extern u8 D_80184DFC; +extern u8 D_80184DD8; +extern u8 D_80184E8C; +extern u8 D_80184E68; +extern u8 D_80184E44; +extern u8 D_80184DB4; +extern void func_80145934(void); +extern u8 D_80184F40; +extern u8 D_80184F1C; +extern u8 D_80184EF8; +extern u8 D_80184ED4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184338[]; +extern unsigned char D_80184368[]; +extern unsigned char D_801843B8[]; +extern unsigned char D_801843E8[]; +extern unsigned char D_80184418[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184468[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184530[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845B8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845C0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F1FD8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F1FDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801845F0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184698[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846BC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846AC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801846D0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801846DC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801846EC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184704[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801846F4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184718[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184734[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184724; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184748[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018475C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184770; +extern void (*D_80184798[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184778; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801847A4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801847A4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801847E4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801847E4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801847E8[])(void); + +void func_80155580(void *a0) { + D_801847E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801849DC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801849DC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184C4C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C4C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184C4C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184C5C[])(void); + +void func_80157544(void *a0) { + D_80184C5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801F2010; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801F2010 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801F2010 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184C84[])(void); +extern int D_801F2010; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184C84[*(unsigned short *)((char *)param_1 + 2)](); + D_801F2010 = D_801F2010 - 1; + if (D_801F2010 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184C64; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184C64); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184C74; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184C74); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80184CC4[])(void); + +void func_80157DC4(void *a0) { + D_80184CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184CCC[])(void); + +void func_80157FC4(void *a0) { + D_80184CCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184C98; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184C98); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80184CD8[])(void); + +void func_8015824C(void *a0) { + D_80184CD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184CA8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184CA8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801F2018; +extern s32 D_801F2024; +extern s32 D_801F2028; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801F2018 = 0; + D_801F2024 = 1; + D_801F2028 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801F2018; +extern s32 D_801F2024; +extern s32 D_801F2028; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801F2018 = 0; + D_801F2024 = 1; + D_801F2028 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184D14[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184D14[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801F2018; + +void func_80158BB0(void *arg0) { + if (D_801F2018 == 0) { + D_801F2018 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801F2024; +extern s32 D_80184CE8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801F2024; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184CE8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801F2028; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801F2028 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801F2018; +extern s32 D_801F2020; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801F2018 == 4) { + D_801F2018 = 5; + } + if (D_801F2020 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184D50[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184D50; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_801594E8); + + +extern void (*D_80184F64[])(void); + +void func_80159698(void *a0) { + D_80184F64[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184D84)); + func_80028620(1, &(*(u8 *)&D_80184D84) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184D84) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185008[])(void); + +void func_80159968(void *a0) { + D_80185008[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018515C[])(void); + +void func_80159B70(void *a0) { + D_8018515C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184F78; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184F78); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80185164[])(void); + +void func_8015A264(void *a0) { + D_80185164[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184F88; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184F88); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8015A3C8.c b/src/ov_SC01_009/ov_SC01_009_jr_8015A3C8.c new file mode 100644 index 000000000..6e3b9b00e --- /dev/null +++ b/src/ov_SC01_009/ov_SC01_009_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EB0; +extern u8 D_80184E20; +extern u8 D_80184DFC; +extern u8 D_80184DD8; +extern u8 D_80184E8C; +extern u8 D_80184E68; +extern u8 D_80184E44; +extern u8 D_80184DB4; +extern void func_80145934(void); +extern u8 D_80184F40; +extern u8 D_80184F1C; +extern u8 D_80184EF8; +extern u8 D_80184ED4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184338[]; +extern unsigned char D_80184368[]; +extern unsigned char D_801843B8[]; +extern unsigned char D_801843E8[]; +extern unsigned char D_80184418[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184468[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184530[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845B8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845C0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F1FD8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F1FDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801845F0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184698[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846BC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846AC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801846D0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801846DC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801846EC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184704[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801846F4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184718[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184734[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184724; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184748[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018475C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184770; +extern void (*D_80184798[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184778; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801847E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801847E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C4C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184C5C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F2010; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184C84[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184C64; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184C74; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184CC4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184CCC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184C98; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184CD8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184CA8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F2018; +extern s32 D_801F2024; +extern s32 D_801F2028; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184D14[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184CE8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F2020; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184F64[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184D84[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185008[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018515C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184F78; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185164[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184F88; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185014[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s8 D_80184F98[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185014[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184F98)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185014[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184FA8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184FA8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184FA8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018516C[])(void); + +void func_8015AD3C(void *a0) { + D_8018516C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_074/ov_SC01_074_after.c b/src/ov_SC01_074/ov_SC01_074_after.c index 3a969978c..6736a2284 100644 --- a/src/ov_SC01_074/ov_SC01_074_after.c +++ b/src/ov_SC01_074/ov_SC01_074_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_074/nonmatchings/ov_SC01_074_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180424[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180424[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180464[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180464[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180468[])(void); - -void func_80155580(void *a0) { - D_80180468[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018065C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018065C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801808CC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801808CC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801808CC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801808DC[])(void); - -void func_80157544(void *a0) { - D_801808DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019AA90; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019AA90 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019AA90 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180904[])(void); -extern int D_8019AA90; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180904[*(unsigned short *)((char *)param_1 + 2)](); - D_8019AA90 = D_8019AA90 - 1; - if (D_8019AA90 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801808E4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801808E4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801808F4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801808F4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180944[])(void); - -void func_80157DC4(void *a0) { - D_80180944[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018094C[])(void); - -void func_80157FC4(void *a0) { - D_8018094C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180918; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180918); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180958[])(void); - -void func_8015824C(void *a0) { - D_80180958[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180928; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180928); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019AA98; -extern s32 D_8019AAA4; -extern s32 D_8019AAA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019AA98 = 0; - D_8019AAA4 = 1; - D_8019AAA8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019AA98; -extern s32 D_8019AAA4; -extern s32 D_8019AAA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019AA98 = 0; - D_8019AAA4 = 1; - D_8019AAA8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180994[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180994[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019AA98; - -void func_80158BB0(void *arg0) { - if (D_8019AA98 == 0) { - D_8019AA98 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019AAA4; -extern s32 D_80180968[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019AAA4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180968[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019AAA8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019AAA8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019AA98; -extern s32 D_8019AAA0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019AA98 == 4) { - D_8019AA98 = 5; - } - if (D_8019AAA0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801809D0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801809D0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_801594E8); - - -extern void (*D_80180BE4[])(void); - -void func_80159698(void *a0) { - D_80180BE4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180A04)); - func_80028620(1, &(*(u8 *)&D_80180A04) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180A04) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80180C88[])(void); - -void func_80159968(void *a0) { - D_80180C88[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180DDC[])(void); - -void func_80159B70(void *a0) { - D_80180DDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80180BF8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180BF8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180DE4[])(void); - -void func_8015A264(void *a0) { - D_80180DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80180C08; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180C08); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180C94[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80180C18; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180C94[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180C18); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180C94[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180C28 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180C28; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180C28); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180DEC[])(void); - -void func_8015AD3C(void *a0) { - D_80180DEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8015444C.c b/src/ov_SC01_074/ov_SC01_074_jr_8015444C.c new file mode 100644 index 000000000..43d28ca65 --- /dev/null +++ b/src/ov_SC01_074/ov_SC01_074_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B30; +extern u8 D_80180AA0; +extern u8 D_80180A7C; +extern u8 D_80180A58; +extern u8 D_80180B0C; +extern u8 D_80180AE8; +extern u8 D_80180AC4; +extern u8 D_80180A34; +extern void func_80145934(void); +extern u8 D_80180BC0; +extern u8 D_80180B9C; +extern u8 D_80180B78; +extern u8 D_80180B54; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFB8[]; +extern unsigned char D_8017FFE8[]; +extern unsigned char D_80180038[]; +extern unsigned char D_80180068[]; +extern unsigned char D_80180098[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180238[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180240; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AA58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AA5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180270; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180318[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018033C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018032C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180350[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018035C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018036C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180384[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180374; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180398[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803B4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803A4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803C8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803DC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F0; +extern void (*D_80180418[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801803F8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180424[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180424[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180464[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180464[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180468[])(void); + +void func_80155580(void *a0) { + D_80180468[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018065C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018065C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801808CC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801808CC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801808CC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801808DC[])(void); + +void func_80157544(void *a0) { + D_801808DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019AA90; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019AA90 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019AA90 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180904[])(void); +extern int D_8019AA90; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180904[*(unsigned short *)((char *)param_1 + 2)](); + D_8019AA90 = D_8019AA90 - 1; + if (D_8019AA90 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808E4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801808E4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801808F4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801808F4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180944[])(void); + +void func_80157DC4(void *a0) { + D_80180944[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018094C[])(void); + +void func_80157FC4(void *a0) { + D_8018094C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180918; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180918); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180958[])(void); + +void func_8015824C(void *a0) { + D_80180958[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180928; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180928); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019AA98; +extern s32 D_8019AAA4; +extern s32 D_8019AAA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019AA98 = 0; + D_8019AAA4 = 1; + D_8019AAA8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019AA98; +extern s32 D_8019AAA4; +extern s32 D_8019AAA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019AA98 = 0; + D_8019AAA4 = 1; + D_8019AAA8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180994[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180994[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019AA98; + +void func_80158BB0(void *arg0) { + if (D_8019AA98 == 0) { + D_8019AA98 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019AAA4; +extern s32 D_80180968[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019AAA4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180968[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019AAA8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019AAA8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019AA98; +extern s32 D_8019AAA0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019AA98 == 4) { + D_8019AA98 = 5; + } + if (D_8019AAA0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801809D0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801809D0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_801594E8); + + +extern void (*D_80180BE4[])(void); + +void func_80159698(void *a0) { + D_80180BE4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180A04)); + func_80028620(1, &(*(u8 *)&D_80180A04) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180A04) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80180C88[])(void); + +void func_80159968(void *a0) { + D_80180C88[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180DDC[])(void); + +void func_80159B70(void *a0) { + D_80180DDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80180BF8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180BF8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180DE4[])(void); + +void func_8015A264(void *a0) { + D_80180DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80180C08; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180C08); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_074/ov_SC01_074_jr_8015A3C8.c b/src/ov_SC01_074/ov_SC01_074_jr_8015A3C8.c new file mode 100644 index 000000000..0cb428066 --- /dev/null +++ b/src/ov_SC01_074/ov_SC01_074_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B30; +extern u8 D_80180AA0; +extern u8 D_80180A7C; +extern u8 D_80180A58; +extern u8 D_80180B0C; +extern u8 D_80180AE8; +extern u8 D_80180AC4; +extern u8 D_80180A34; +extern void func_80145934(void); +extern u8 D_80180BC0; +extern u8 D_80180B9C; +extern u8 D_80180B78; +extern u8 D_80180B54; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFB8[]; +extern unsigned char D_8017FFE8[]; +extern unsigned char D_80180038[]; +extern unsigned char D_80180068[]; +extern unsigned char D_80180098[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180238[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180240; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AA58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AA5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180270; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180318[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018033C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018032C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180350[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018035C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018036C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180384[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180374; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180398[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803B4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803A4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803C8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803DC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F0; +extern void (*D_80180418[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801803F8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180464[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180468[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801808CC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801808DC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019AA90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180904[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808E4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801808F4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180944[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018094C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180918; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180958[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180928; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019AA98; +extern s32 D_8019AAA4; +extern s32 D_8019AAA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180994[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180968[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019AAA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180BE4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180A04[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180C88[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180DDC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180BF8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180DE4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180C08; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180C94[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180C18; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180C94[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180C18); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180C94[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180C28 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180C28; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180C28); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180DEC[])(void); + +void func_8015AD3C(void *a0) { + D_80180DEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_080/ov_SC01_080_after.c b/src/ov_SC01_080/ov_SC01_080_after.c index 1cbcf7788..2eb2a5468 100644 --- a/src/ov_SC01_080/ov_SC01_080_after.c +++ b/src/ov_SC01_080/ov_SC01_080_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_080/nonmatchings/ov_SC01_080_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80185384[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80185384[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801853C4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801853C4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801853C8[])(void); - -void func_80155580(void *a0) { - D_801853C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801855BC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801855BC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018582C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018582C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018582C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018583C[])(void); - -void func_80157544(void *a0) { - D_8018583C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C48C0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C48C0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C48C0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80185864[])(void); -extern int D_801C48C0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80185864[*(unsigned short *)((char *)param_1 + 2)](); - D_801C48C0 = D_801C48C0 - 1; - if (D_801C48C0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80185844; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185844); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80185854; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185854); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801858A4[])(void); - -void func_80157DC4(void *a0) { - D_801858A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801858AC[])(void); - -void func_80157FC4(void *a0) { - D_801858AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80185878; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80185878); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801858B8[])(void); - -void func_8015824C(void *a0) { - D_801858B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80185888; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185888); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C48C8; -extern s32 D_801C48D4; -extern s32 D_801C48D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C48C8 = 0; - D_801C48D4 = 1; - D_801C48D8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C48C8; -extern s32 D_801C48D4; -extern s32 D_801C48D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C48C8 = 0; - D_801C48D4 = 1; - D_801C48D8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801858F4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801858F4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C48C8; - -void func_80158BB0(void *arg0) { - if (D_801C48C8 == 0) { - D_801C48C8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C48D4; -extern s32 D_801858C8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C48D4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801858C8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C48D8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C48D8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C48C8; -extern s32 D_801C48D0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C48C8 == 4) { - D_801C48C8 = 5; - } - if (D_801C48D0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80185930[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80185930; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_801594E8); - - -extern void (*D_80185B44[])(void); - -void func_80159698(void *a0) { - D_80185B44[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80185964)); - func_80028620(1, &(*(u8 *)&D_80185964) + 0x10); - func_80028620(2, &(*(u8 *)&D_80185964) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185BE8[])(void); - -void func_80159968(void *a0) { - D_80185BE8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185D3C[])(void); - -void func_80159B70(void *a0) { - D_80185D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80185B58; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185B58); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80185D44[])(void); - -void func_8015A264(void *a0) { - D_80185D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80185B68; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185B68); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185BF4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80185B78; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185BF4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185B78); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185BF4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185B88 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80185B88; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80185B88); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80185D4C[])(void); - -void func_8015AD3C(void *a0) { - D_80185D4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8015444C.c b/src/ov_SC01_080/ov_SC01_080_jr_8015444C.c new file mode 100644 index 000000000..b2b5db910 --- /dev/null +++ b/src/ov_SC01_080/ov_SC01_080_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185A90; +extern u8 D_80185A00; +extern u8 D_801859DC; +extern u8 D_801859B8; +extern u8 D_80185A6C; +extern u8 D_80185A48; +extern u8 D_80185A24; +extern u8 D_80185994; +extern void func_80145934(void); +extern u8 D_80185B20; +extern u8 D_80185AFC; +extern u8 D_80185AD8; +extern u8 D_80185AB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184F18[]; +extern unsigned char D_80184F48[]; +extern unsigned char D_80184F98[]; +extern unsigned char D_80184FC8[]; +extern unsigned char D_80184FF8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185048[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185110[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185198[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801851A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4888; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C488C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801851D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185278[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018529C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018528C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801852B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801852BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801852CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801852E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801852D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801852F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185314[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185304; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185328[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018533C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185350; +extern void (*D_80185378[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185358; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80185384[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80185384[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801853C4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801853C4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801853C8[])(void); + +void func_80155580(void *a0) { + D_801853C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801855BC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801855BC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018582C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018582C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018582C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018583C[])(void); + +void func_80157544(void *a0) { + D_8018583C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C48C0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C48C0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C48C0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80185864[])(void); +extern int D_801C48C0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80185864[*(unsigned short *)((char *)param_1 + 2)](); + D_801C48C0 = D_801C48C0 - 1; + if (D_801C48C0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185844; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185844); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80185854; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185854); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801858A4[])(void); + +void func_80157DC4(void *a0) { + D_801858A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801858AC[])(void); + +void func_80157FC4(void *a0) { + D_801858AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80185878; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80185878); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801858B8[])(void); + +void func_8015824C(void *a0) { + D_801858B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80185888; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185888); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C48C8; +extern s32 D_801C48D4; +extern s32 D_801C48D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C48C8 = 0; + D_801C48D4 = 1; + D_801C48D8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C48C8; +extern s32 D_801C48D4; +extern s32 D_801C48D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C48C8 = 0; + D_801C48D4 = 1; + D_801C48D8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801858F4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801858F4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C48C8; + +void func_80158BB0(void *arg0) { + if (D_801C48C8 == 0) { + D_801C48C8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C48D4; +extern s32 D_801858C8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C48D4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801858C8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C48D8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C48D8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C48C8; +extern s32 D_801C48D0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C48C8 == 4) { + D_801C48C8 = 5; + } + if (D_801C48D0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80185930[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80185930; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_801594E8); + + +extern void (*D_80185B44[])(void); + +void func_80159698(void *a0) { + D_80185B44[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80185964)); + func_80028620(1, &(*(u8 *)&D_80185964) + 0x10); + func_80028620(2, &(*(u8 *)&D_80185964) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185BE8[])(void); + +void func_80159968(void *a0) { + D_80185BE8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185D3C[])(void); + +void func_80159B70(void *a0) { + D_80185D3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80185B58; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185B58); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80185D44[])(void); + +void func_8015A264(void *a0) { + D_80185D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80185B68; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185B68); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8015A3C8.c b/src/ov_SC01_080/ov_SC01_080_jr_8015A3C8.c new file mode 100644 index 000000000..0611298fc --- /dev/null +++ b/src/ov_SC01_080/ov_SC01_080_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185A90; +extern u8 D_80185A00; +extern u8 D_801859DC; +extern u8 D_801859B8; +extern u8 D_80185A6C; +extern u8 D_80185A48; +extern u8 D_80185A24; +extern u8 D_80185994; +extern void func_80145934(void); +extern u8 D_80185B20; +extern u8 D_80185AFC; +extern u8 D_80185AD8; +extern u8 D_80185AB4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184F18[]; +extern unsigned char D_80184F48[]; +extern unsigned char D_80184F98[]; +extern unsigned char D_80184FC8[]; +extern unsigned char D_80184FF8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185048[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185110[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185198[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801851A0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4888; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C488C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801851D0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185278[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018529C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018528C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801852B0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801852BC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801852CC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801852E4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801852D4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801852F8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185314[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185304; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185328[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018533C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185350; +extern void (*D_80185378[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185358; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801853C4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801853C8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018582C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018583C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C48C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185864[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185844; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185854; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801858A4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801858AC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185878; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801858B8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185888; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C48C8; +extern s32 D_801C48D4; +extern s32 D_801C48D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801858F4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801858C8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C48D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185B44[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185964[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185BE8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185D3C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185B58; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185D44[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185B68; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185BF4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80185B78; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185BF4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185B78); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185BF4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185B88 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185B88; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80185B88); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80185D4C[])(void); + +void func_8015AD3C(void *a0) { + D_80185D4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC01_084/ov_SC01_084_after.c b/src/ov_SC01_084/ov_SC01_084_after.c index d6bdb4e1b..8c4fc28c0 100644 --- a/src/ov_SC01_084/ov_SC01_084_after.c +++ b/src/ov_SC01_084/ov_SC01_084_after.c @@ -2616,1415 +2616,3 @@ 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_SC01_084/nonmatchings/ov_SC01_084_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", 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) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80188678[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80188678[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801886B8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801886B8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801886BC[])(void); - -void func_80155580(void *a0) { - D_801886BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801888B0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801888B0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188B20 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188B20[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188B20[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188B30[])(void); - -void func_80157544(void *a0) { - D_80188B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C6368; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C6368 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C6368 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80188B58[])(void); -extern int D_801C6368; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80188B58[*(unsigned short *)((char *)param_1 + 2)](); - D_801C6368 = D_801C6368 - 1; - if (D_801C6368 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188B38; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188B38); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188B48; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188B48); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188B98[])(void); - -void func_80157DC4(void *a0) { - D_80188B98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80188BA0[])(void); - -void func_80157FC4(void *a0) { - D_80188BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80188B6C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80188B6C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80188BAC[])(void); - -void func_8015824C(void *a0) { - D_80188BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80188B7C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188B7C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C6370; -extern s32 D_801C637C; -extern s32 D_801C6380; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C6370 = 0; - D_801C637C = 1; - D_801C6380 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C6370; -extern s32 D_801C637C; -extern s32 D_801C6380; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C6370 = 0; - D_801C637C = 1; - D_801C6380 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188BE8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188BE8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C6370; - -void func_80158BB0(void *arg0) { - if (D_801C6370 == 0) { - D_801C6370 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C637C; -extern s32 D_80188BBC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C637C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188BBC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C6380; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C6380 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C6370; -extern s32 D_801C6378; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C6370 == 4) { - D_801C6370 = 5; - } - if (D_801C6378 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80188C24[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80188C24; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_801594E8); - - -extern void (*D_80188E38[])(void); - -void func_80159698(void *a0) { - D_80188E38[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80188C58)); - func_80028620(1, &(*(u8 *)&D_80188C58) + 0x10); - func_80028620(2, &(*(u8 *)&D_80188C58) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188EDC[])(void); - -void func_80159968(void *a0) { - D_80188EDC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80189030[])(void); - -void func_80159B70(void *a0) { - D_80189030[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188E4C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188E4C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80189038[])(void); - -void func_8015A264(void *a0) { - D_80189038[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80188E5C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188E5C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188EE8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80188E6C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188EE8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E6C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188EE8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188E7C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80188E7C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80188E7C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80189040[])(void); - -void func_8015AD3C(void *a0) { - D_80189040[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8015444C.c b/src/ov_SC01_084/ov_SC01_084_jr_8015444C.c new file mode 100644 index 000000000..79ab9f6e3 --- /dev/null +++ b/src/ov_SC01_084/ov_SC01_084_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D84; +extern u8 D_80188CF4; +extern u8 D_80188CD0; +extern u8 D_80188CAC; +extern u8 D_80188D60; +extern u8 D_80188D3C; +extern u8 D_80188D18; +extern u8 D_80188C88; +extern void func_80145934(void); +extern u8 D_80188E14; +extern u8 D_80188DF0; +extern u8 D_80188DCC; +extern u8 D_80188DA8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018820C[]; +extern unsigned char D_8018823C[]; +extern unsigned char D_8018828C[]; +extern unsigned char D_801882BC[]; +extern unsigned char D_801882EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018833C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188404[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018848C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188494; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C6330; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C6334; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801884C4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018856C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188590[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188580; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801885B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801885C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801885D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801885C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801885EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188608[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801885F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018861C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188630[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188644; +extern void (*D_8018866C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018864C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80188678[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80188678[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801886B8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801886B8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801886BC[])(void); + +void func_80155580(void *a0) { + D_801886BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801888B0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801888B0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188B20 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188B20[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188B20[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188B30[])(void); + +void func_80157544(void *a0) { + D_80188B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C6368; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C6368 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C6368 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80188B58[])(void); +extern int D_801C6368; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80188B58[*(unsigned short *)((char *)param_1 + 2)](); + D_801C6368 = D_801C6368 - 1; + if (D_801C6368 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188B38; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188B38); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188B48; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188B48); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188B98[])(void); + +void func_80157DC4(void *a0) { + D_80188B98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80188BA0[])(void); + +void func_80157FC4(void *a0) { + D_80188BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80188B6C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80188B6C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80188BAC[])(void); + +void func_8015824C(void *a0) { + D_80188BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80188B7C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188B7C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C6370; +extern s32 D_801C637C; +extern s32 D_801C6380; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C6370 = 0; + D_801C637C = 1; + D_801C6380 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C6370; +extern s32 D_801C637C; +extern s32 D_801C6380; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C6370 = 0; + D_801C637C = 1; + D_801C6380 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188BE8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188BE8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C6370; + +void func_80158BB0(void *arg0) { + if (D_801C6370 == 0) { + D_801C6370 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C637C; +extern s32 D_80188BBC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C637C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188BBC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C6380; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C6380 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C6370; +extern s32 D_801C6378; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C6370 == 4) { + D_801C6370 = 5; + } + if (D_801C6378 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80188C24[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80188C24; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_801594E8); + + +extern void (*D_80188E38[])(void); + +void func_80159698(void *a0) { + D_80188E38[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80188C58)); + func_80028620(1, &(*(u8 *)&D_80188C58) + 0x10); + func_80028620(2, &(*(u8 *)&D_80188C58) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188EDC[])(void); + +void func_80159968(void *a0) { + D_80188EDC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80189030[])(void); + +void func_80159B70(void *a0) { + D_80189030[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188E4C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188E4C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80189038[])(void); + +void func_8015A264(void *a0) { + D_80189038[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80188E5C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188E5C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8015A3C8.c b/src/ov_SC01_084/ov_SC01_084_jr_8015A3C8.c new file mode 100644 index 000000000..2f8601b0d --- /dev/null +++ b/src/ov_SC01_084/ov_SC01_084_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D84; +extern u8 D_80188CF4; +extern u8 D_80188CD0; +extern u8 D_80188CAC; +extern u8 D_80188D60; +extern u8 D_80188D3C; +extern u8 D_80188D18; +extern u8 D_80188C88; +extern void func_80145934(void); +extern u8 D_80188E14; +extern u8 D_80188DF0; +extern u8 D_80188DCC; +extern u8 D_80188DA8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018820C[]; +extern unsigned char D_8018823C[]; +extern unsigned char D_8018828C[]; +extern unsigned char D_801882BC[]; +extern unsigned char D_801882EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018833C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188404[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018848C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188494; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C6330; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C6334; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801884C4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018856C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188590[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188580; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801885B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801885C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801885D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801885C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801885EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188608[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801885F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018861C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188630[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188644; +extern void (*D_8018866C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018864C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801886B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801886BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188B20[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188B30[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C6368; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188B58[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188B38; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188B48; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188B98[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188BA0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188B6C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188BAC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188B7C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C6370; +extern s32 D_801C637C; +extern s32 D_801C6380; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188BE8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188BBC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C6378; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188E38[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188C58[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188EDC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189030[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188E4C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189038[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188E5C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188EE8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80188E6C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188EE8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E6C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188EE8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188E7C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188E7C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80188E7C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80189040[])(void); + +void func_8015AD3C(void *a0) { + D_80189040[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_000/ov_SC02_000_after.c b/src/ov_SC02_000/ov_SC02_000_after.c index 05e283b2e..950dc36df 100644 --- a/src/ov_SC02_000/ov_SC02_000_after.c +++ b/src/ov_SC02_000/ov_SC02_000_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_000/nonmatchings/ov_SC02_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018CA28[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018CA28[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018CA68[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018CA68[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018CA6C[])(void); - -void func_80155580(void *a0) { - D_8018CA6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018CC60[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018CC60[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CED0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018CED0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018CED0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018CEE0[])(void); - -void func_80157544(void *a0) { - D_8018CEE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E6E98; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E6E98 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E6E98 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018CF08[])(void); -extern int D_801E6E98; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018CF08[*(unsigned short *)((char *)param_1 + 2)](); - D_801E6E98 = D_801E6E98 - 1; - if (D_801E6E98 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018CEE8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CEE8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018CEF8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEF8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018CF48[])(void); - -void func_80157DC4(void *a0) { - D_8018CF48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018CF50[])(void); - -void func_80157FC4(void *a0) { - D_8018CF50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018CF1C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018CF1C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018CF5C[])(void); - -void func_8015824C(void *a0) { - D_8018CF5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018CF2C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CF2C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E6EA0; -extern s32 D_801E6EAC; -extern s32 D_801E6EB0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E6EA0 = 0; - D_801E6EAC = 1; - D_801E6EB0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E6EA0; -extern s32 D_801E6EAC; -extern s32 D_801E6EB0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E6EA0 = 0; - D_801E6EAC = 1; - D_801E6EB0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018CF98[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018CF98[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E6EA0; - -void func_80158BB0(void *arg0) { - if (D_801E6EA0 == 0) { - D_801E6EA0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E6EAC; -extern s32 D_8018CF6C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E6EAC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF6C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E6EB0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E6EB0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E6EA0; -extern s32 D_801E6EA8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E6EA0 == 4) { - D_801E6EA0 = 5; - } - if (D_801E6EA8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018CFD4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018CFD4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_801594E8); - - -extern void (*D_8018D1E8[])(void); - -void func_80159698(void *a0) { - D_8018D1E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D008)); - func_80028620(1, &(*(u8 *)&D_8018D008) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D008) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018D28C[])(void); - -void func_80159968(void *a0) { - D_8018D28C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018D3E0[])(void); - -void func_80159B70(void *a0) { - D_8018D3E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018D1FC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1FC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018D3E8[])(void); - -void func_8015A264(void *a0) { - D_8018D3E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018D20C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D20C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018D298[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018D21C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018D298[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D22C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018D22C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018D22C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018D3F0[])(void); - -void func_8015AD3C(void *a0) { - D_8018D3F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8015444C.c b/src/ov_SC02_000/ov_SC02_000_jr_8015444C.c new file mode 100644 index 000000000..7d938282d --- /dev/null +++ b/src/ov_SC02_000/ov_SC02_000_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018CA28[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018CA28[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018CA68[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018CA68[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018CA6C[])(void); + +void func_80155580(void *a0) { + D_8018CA6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018CC60[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018CC60[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CED0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018CED0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018CEE0[])(void); + +void func_80157544(void *a0) { + D_8018CEE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E6E98; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E6E98 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E6E98 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018CF08[])(void); +extern int D_801E6E98; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018CF08[*(unsigned short *)((char *)param_1 + 2)](); + D_801E6E98 = D_801E6E98 - 1; + if (D_801E6E98 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CEE8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEF8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018CF48[])(void); + +void func_80157DC4(void *a0) { + D_8018CF48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018CF50[])(void); + +void func_80157FC4(void *a0) { + D_8018CF50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018CF1C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018CF1C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018CF5C[])(void); + +void func_8015824C(void *a0) { + D_8018CF5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018CF2C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CF2C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E6EA0 = 0; + D_801E6EAC = 1; + D_801E6EB0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E6EA0 = 0; + D_801E6EAC = 1; + D_801E6EB0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018CF98[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018CF98[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E6EA0; + +void func_80158BB0(void *arg0) { + if (D_801E6EA0 == 0) { + D_801E6EA0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E6EAC; +extern s32 D_8018CF6C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E6EAC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF6C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E6EB0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E6EB0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA0; +extern s32 D_801E6EA8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E6EA0 == 4) { + D_801E6EA0 = 5; + } + if (D_801E6EA8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018CFD4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018CFD4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_801594E8); + + +extern void (*D_8018D1E8[])(void); + +void func_80159698(void *a0) { + D_8018D1E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D008)); + func_80028620(1, &(*(u8 *)&D_8018D008) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D008) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018D28C[])(void); + +void func_80159968(void *a0) { + D_8018D28C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018D3E0[])(void); + +void func_80159B70(void *a0) { + D_8018D3E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018D1FC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1FC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018D3E8[])(void); + +void func_8015A264(void *a0) { + D_8018D3E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018D20C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D20C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_000/ov_SC02_000_jr_8015A3C8.c b/src/ov_SC02_000/ov_SC02_000_jr_8015A3C8.c new file mode 100644 index 000000000..7a509df85 --- /dev/null +++ b/src/ov_SC02_000/ov_SC02_000_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CEE0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E6E98; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CF08[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CF48[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF50[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CF1C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF5C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CF2C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF98[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF6C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D1E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D008[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D28C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D3E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D3E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D20C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D298[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018D21C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D22C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D22C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018D22C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018D3F0[])(void); + +void func_8015AD3C(void *a0) { + D_8018D3F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_003/ov_SC02_003_after.c b/src/ov_SC02_003/ov_SC02_003_after.c index a810aeb0f..b759f5d58 100644 --- a/src/ov_SC02_003/ov_SC02_003_after.c +++ b/src/ov_SC02_003/ov_SC02_003_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_003/nonmatchings/ov_SC02_003_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018CA28[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018CA28[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018CA68[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018CA68[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018CA6C[])(void); - -void func_80155580(void *a0) { - D_8018CA6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018CC60[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018CC60[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CED0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018CED0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018CED0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018CEE0[])(void); - -void func_80157544(void *a0) { - D_8018CEE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E6E98; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E6E98 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E6E98 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018CF08[])(void); -extern int D_801E6E98; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018CF08[*(unsigned short *)((char *)param_1 + 2)](); - D_801E6E98 = D_801E6E98 - 1; - if (D_801E6E98 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018CEE8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CEE8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018CEF8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEF8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018CF48[])(void); - -void func_80157DC4(void *a0) { - D_8018CF48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018CF50[])(void); - -void func_80157FC4(void *a0) { - D_8018CF50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018CF1C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018CF1C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018CF5C[])(void); - -void func_8015824C(void *a0) { - D_8018CF5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018CF2C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CF2C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E6EA0; -extern s32 D_801E6EAC; -extern s32 D_801E6EB0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E6EA0 = 0; - D_801E6EAC = 1; - D_801E6EB0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E6EA0; -extern s32 D_801E6EAC; -extern s32 D_801E6EB0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E6EA0 = 0; - D_801E6EAC = 1; - D_801E6EB0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018CF98[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018CF98[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E6EA0; - -void func_80158BB0(void *arg0) { - if (D_801E6EA0 == 0) { - D_801E6EA0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E6EAC; -extern s32 D_8018CF6C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E6EAC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF6C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E6EB0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E6EB0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E6EA0; -extern s32 D_801E6EA8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E6EA0 == 4) { - D_801E6EA0 = 5; - } - if (D_801E6EA8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018CFD4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018CFD4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_801594E8); - - -extern void (*D_8018D1E8[])(void); - -void func_80159698(void *a0) { - D_8018D1E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D008)); - func_80028620(1, &(*(u8 *)&D_8018D008) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D008) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018D28C[])(void); - -void func_80159968(void *a0) { - D_8018D28C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018D3E0[])(void); - -void func_80159B70(void *a0) { - D_8018D3E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018D1FC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1FC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018D3E8[])(void); - -void func_8015A264(void *a0) { - D_8018D3E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018D20C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D20C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018D298[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018D21C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018D298[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018D298[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D22C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018D22C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018D22C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018D3F0[])(void); - -void func_8015AD3C(void *a0) { - D_8018D3F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8015444C.c b/src/ov_SC02_003/ov_SC02_003_jr_8015444C.c new file mode 100644 index 000000000..d29605b3b --- /dev/null +++ b/src/ov_SC02_003/ov_SC02_003_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018CA28[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018CA28[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018CA68[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018CA68[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018CA6C[])(void); + +void func_80155580(void *a0) { + D_8018CA6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018CC60[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018CC60[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CED0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018CED0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018CEE0[])(void); + +void func_80157544(void *a0) { + D_8018CEE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E6E98; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E6E98 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E6E98 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018CF08[])(void); +extern int D_801E6E98; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018CF08[*(unsigned short *)((char *)param_1 + 2)](); + D_801E6E98 = D_801E6E98 - 1; + if (D_801E6E98 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CEE8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEF8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018CF48[])(void); + +void func_80157DC4(void *a0) { + D_8018CF48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018CF50[])(void); + +void func_80157FC4(void *a0) { + D_8018CF50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018CF1C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018CF1C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018CF5C[])(void); + +void func_8015824C(void *a0) { + D_8018CF5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018CF2C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CF2C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E6EA0 = 0; + D_801E6EAC = 1; + D_801E6EB0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E6EA0 = 0; + D_801E6EAC = 1; + D_801E6EB0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018CF98[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018CF98[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E6EA0; + +void func_80158BB0(void *arg0) { + if (D_801E6EA0 == 0) { + D_801E6EA0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E6EAC; +extern s32 D_8018CF6C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E6EAC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF6C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E6EB0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E6EB0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA0; +extern s32 D_801E6EA8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E6EA0 == 4) { + D_801E6EA0 = 5; + } + if (D_801E6EA8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018CFD4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018CFD4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_801594E8); + + +extern void (*D_8018D1E8[])(void); + +void func_80159698(void *a0) { + D_8018D1E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D008)); + func_80028620(1, &(*(u8 *)&D_8018D008) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D008) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018D28C[])(void); + +void func_80159968(void *a0) { + D_8018D28C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018D3E0[])(void); + +void func_80159B70(void *a0) { + D_8018D3E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018D1FC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1FC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018D3E8[])(void); + +void func_8015A264(void *a0) { + D_8018D3E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018D20C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D20C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8015A3C8.c b/src/ov_SC02_003/ov_SC02_003_jr_8015A3C8.c new file mode 100644 index 000000000..7a509df85 --- /dev/null +++ b/src/ov_SC02_003/ov_SC02_003_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D134; +extern u8 D_8018D0A4; +extern u8 D_8018D080; +extern u8 D_8018D05C; +extern u8 D_8018D110; +extern u8 D_8018D0EC; +extern u8 D_8018D0C8; +extern u8 D_8018D038; +extern void func_80145934(void); +extern u8 D_8018D1C4; +extern u8 D_8018D1A0; +extern u8 D_8018D17C; +extern u8 D_8018D158; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C5BC[]; +extern unsigned char D_8018C5EC[]; +extern unsigned char D_8018C63C[]; +extern unsigned char D_8018C66C[]; +extern unsigned char D_8018C69C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6EC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C7B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C83C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C844; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E6E60; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E6E64; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C874; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C91C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C940[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C930; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C954[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C960[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C970[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C988[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C978; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C99C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C9B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C9A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C9CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C9E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9F4; +extern void (*D_8018CA1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CED0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CEE0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E6E98; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CF08[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CEE8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEF8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CF48[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF50[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CF1C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF5C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CF2C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E6EA0; +extern s32 D_801E6EAC; +extern s32 D_801E6EB0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF98[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF6C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E6EA8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D1E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D008[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D28C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D3E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D3E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D20C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D298[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018D21C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D298[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018D21C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D298[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D22C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D22C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018D22C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018D3F0[])(void); + +void func_8015AD3C(void *a0) { + D_8018D3F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_004/ov_SC02_004_after.c b/src/ov_SC02_004/ov_SC02_004_after.c index bee9f8432..079fd3594 100644 --- a/src/ov_SC02_004/ov_SC02_004_after.c +++ b/src/ov_SC02_004/ov_SC02_004_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_004/nonmatchings/ov_SC02_004_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FB08[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FB08[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017FB48[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017FB48[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017FB4C[])(void); - -void func_80155580(void *a0) { - D_8017FB4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8017FD40[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8017FD40[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017FFB0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8017FFB0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8017FFB0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8017FFC0[])(void); - -void func_80157544(void *a0) { - D_8017FFC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801950E8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801950E8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801950E8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8017FFE8[])(void); -extern int D_801950E8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8017FFE8[*(unsigned short *)((char *)param_1 + 2)](); - D_801950E8 = D_801950E8 - 1; - if (D_801950E8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8017FFC8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8017FFC8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8017FFD8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8017FFD8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180028[])(void); - -void func_80157DC4(void *a0) { - D_80180028[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180030[])(void); - -void func_80157FC4(void *a0) { - D_80180030[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8017FFFC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8017FFFC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018003C[])(void); - -void func_8015824C(void *a0) { - D_8018003C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018000C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018000C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801950F0; -extern s32 D_801950FC; -extern s32 D_80195100; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801950F0 = 0; - D_801950FC = 1; - D_80195100 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801950F0; -extern s32 D_801950FC; -extern s32 D_80195100; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801950F0 = 0; - D_801950FC = 1; - D_80195100 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180078[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180078[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801950F0; - -void func_80158BB0(void *arg0) { - if (D_801950F0 == 0) { - D_801950F0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801950FC; -extern s32 D_8018004C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801950FC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018004C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80195100; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80195100 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801950F0; -extern s32 D_801950F8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801950F0 == 4) { - D_801950F0 = 5; - } - if (D_801950F8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801800B4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801800B4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_801594E8); - - -extern void (*D_801802C8[])(void); - -void func_80159698(void *a0) { - D_801802C8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801800E8)); - func_80028620(1, &(*(u8 *)&D_801800E8) + 0x10); - func_80028620(2, &(*(u8 *)&D_801800E8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018036C[])(void); - -void func_80159968(void *a0) { - D_8018036C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801804C0[])(void); - -void func_80159B70(void *a0) { - D_801804C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801802DC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801802DC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801804C8[])(void); - -void func_8015A264(void *a0) { - D_801804C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801802EC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801802EC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180378[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801802FC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180378[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801802FC); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180378[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018030C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018030C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018030C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801804D0[])(void); - -void func_8015AD3C(void *a0) { - D_801804D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8015444C.c b/src/ov_SC02_004/ov_SC02_004_jr_8015444C.c new file mode 100644 index 000000000..4f4628092 --- /dev/null +++ b/src/ov_SC02_004/ov_SC02_004_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180214; +extern u8 D_80180184; +extern u8 D_80180160; +extern u8 D_8018013C; +extern u8 D_801801F0; +extern u8 D_801801CC; +extern u8 D_801801A8; +extern u8 D_80180118; +extern void func_80145934(void); +extern u8 D_801802A4; +extern u8 D_80180280; +extern u8 D_8018025C; +extern u8 D_80180238; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F69C[]; +extern unsigned char D_8017F6CC[]; +extern unsigned char D_8017F71C[]; +extern unsigned char D_8017F74C[]; +extern unsigned char D_8017F77C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F7CC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F894[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F91C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F924; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801950B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801950B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F954; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F9FC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA20[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA10; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA34[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA40[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA50[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FA68[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA58; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FA7C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FA98[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FA88; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAAC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAC0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FAD4; +extern void (*D_8017FAFC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FADC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FB08[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FB08[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017FB48[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017FB48[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017FB4C[])(void); + +void func_80155580(void *a0) { + D_8017FB4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8017FD40[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8017FD40[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017FFB0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFB0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8017FFB0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8017FFC0[])(void); + +void func_80157544(void *a0) { + D_8017FFC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801950E8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801950E8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801950E8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8017FFE8[])(void); +extern int D_801950E8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8017FFE8[*(unsigned short *)((char *)param_1 + 2)](); + D_801950E8 = D_801950E8 - 1; + if (D_801950E8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017FFC8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8017FFC8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8017FFD8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8017FFD8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180028[])(void); + +void func_80157DC4(void *a0) { + D_80180028[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180030[])(void); + +void func_80157FC4(void *a0) { + D_80180030[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8017FFFC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8017FFFC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018003C[])(void); + +void func_8015824C(void *a0) { + D_8018003C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018000C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018000C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801950F0; +extern s32 D_801950FC; +extern s32 D_80195100; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801950F0 = 0; + D_801950FC = 1; + D_80195100 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801950F0; +extern s32 D_801950FC; +extern s32 D_80195100; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801950F0 = 0; + D_801950FC = 1; + D_80195100 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180078[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180078[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801950F0; + +void func_80158BB0(void *arg0) { + if (D_801950F0 == 0) { + D_801950F0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801950FC; +extern s32 D_8018004C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801950FC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018004C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80195100; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80195100 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801950F0; +extern s32 D_801950F8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801950F0 == 4) { + D_801950F0 = 5; + } + if (D_801950F8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801800B4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801800B4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_801594E8); + + +extern void (*D_801802C8[])(void); + +void func_80159698(void *a0) { + D_801802C8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801800E8)); + func_80028620(1, &(*(u8 *)&D_801800E8) + 0x10); + func_80028620(2, &(*(u8 *)&D_801800E8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018036C[])(void); + +void func_80159968(void *a0) { + D_8018036C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801804C0[])(void); + +void func_80159B70(void *a0) { + D_801804C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801802DC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801802DC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801804C8[])(void); + +void func_8015A264(void *a0) { + D_801804C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801802EC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801802EC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_004/ov_SC02_004_jr_8015A3C8.c b/src/ov_SC02_004/ov_SC02_004_jr_8015A3C8.c new file mode 100644 index 000000000..a8e291dea --- /dev/null +++ b/src/ov_SC02_004/ov_SC02_004_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180214; +extern u8 D_80180184; +extern u8 D_80180160; +extern u8 D_8018013C; +extern u8 D_801801F0; +extern u8 D_801801CC; +extern u8 D_801801A8; +extern u8 D_80180118; +extern void func_80145934(void); +extern u8 D_801802A4; +extern u8 D_80180280; +extern u8 D_8018025C; +extern u8 D_80180238; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F69C[]; +extern unsigned char D_8017F6CC[]; +extern unsigned char D_8017F71C[]; +extern unsigned char D_8017F74C[]; +extern unsigned char D_8017F77C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F7CC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F894[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F91C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F924; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801950B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801950B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F954; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F9FC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA20[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA10; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA34[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA40[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA50[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FA68[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA58; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FA7C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FA98[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FA88; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAAC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAC0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FAD4; +extern void (*D_8017FAFC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FADC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FB48[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FB4C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFB0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017FFC0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801950E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8017FFE8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017FFC8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8017FFD8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180028[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180030[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8017FFFC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018003C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018000C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801950F0; +extern s32 D_801950FC; +extern s32 D_80195100; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180078[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018004C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801950F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801802C8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801800E8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018036C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801804C0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801802DC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801804C8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801802EC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180378[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801802FC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180378[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801802FC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180378[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018030C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018030C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018030C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801804D0[])(void); + +void func_8015AD3C(void *a0) { + D_801804D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_005/ov_SC02_005_after.c b/src/ov_SC02_005/ov_SC02_005_after.c index 572779028..e0bef9391 100644 --- a/src/ov_SC02_005/ov_SC02_005_after.c +++ b/src/ov_SC02_005/ov_SC02_005_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_005/nonmatchings/ov_SC02_005_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8019270C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8019270C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8019274C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8019274C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80192750[])(void); - -void func_80155580(void *a0) { - D_80192750[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80192944[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80192944[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80192BB4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80192BB4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80192BB4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80192BC4[])(void); - -void func_80157544(void *a0) { - D_80192BC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E3160; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E3160 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E3160 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80192BEC[])(void); -extern int D_801E3160; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80192BEC[*(unsigned short *)((char *)param_1 + 2)](); - D_801E3160 = D_801E3160 - 1; - if (D_801E3160 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80192BCC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80192BCC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80192BDC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80192BDC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80192C2C[])(void); - -void func_80157DC4(void *a0) { - D_80192C2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80192C34[])(void); - -void func_80157FC4(void *a0) { - D_80192C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80192C00; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80192C00); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80192C40[])(void); - -void func_8015824C(void *a0) { - D_80192C40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80192C10; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80192C10); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E3168; -extern s32 D_801E3174; -extern s32 D_801E3178; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E3168 = 0; - D_801E3174 = 1; - D_801E3178 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E3168; -extern s32 D_801E3174; -extern s32 D_801E3178; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E3168 = 0; - D_801E3174 = 1; - D_801E3178 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80192C7C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80192C7C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E3168; - -void func_80158BB0(void *arg0) { - if (D_801E3168 == 0) { - D_801E3168 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E3174; -extern s32 D_80192C50[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E3174; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80192C50[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E3178; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E3178 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E3168; -extern s32 D_801E3170; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E3168 == 4) { - D_801E3168 = 5; - } - if (D_801E3170 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80192CB8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80192CB8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_801594E8); - - -extern void (*D_80192ECC[])(void); - -void func_80159698(void *a0) { - D_80192ECC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80192CEC)); - func_80028620(1, &(*(u8 *)&D_80192CEC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80192CEC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80192F70[])(void); - -void func_80159968(void *a0) { - D_80192F70[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801930C4[])(void); - -void func_80159B70(void *a0) { - D_801930C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80192EE0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80192EE0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801930CC[])(void); - -void func_8015A264(void *a0) { - D_801930CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80192EF0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80192EF0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80192F7C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80192F00; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80192F7C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192F00); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80192F7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80192F10 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80192F10; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80192F10); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801930D4[])(void); - -void func_8015AD3C(void *a0) { - D_801930D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8015444C.c b/src/ov_SC02_005/ov_SC02_005_jr_8015444C.c new file mode 100644 index 000000000..4cda1e826 --- /dev/null +++ b/src/ov_SC02_005/ov_SC02_005_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192E18; +extern u8 D_80192D88; +extern u8 D_80192D64; +extern u8 D_80192D40; +extern u8 D_80192DF4; +extern u8 D_80192DD0; +extern u8 D_80192DAC; +extern u8 D_80192D1C; +extern void func_80145934(void); +extern u8 D_80192EA8; +extern u8 D_80192E84; +extern u8 D_80192E60; +extern u8 D_80192E3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801922A0[]; +extern unsigned char D_801922D0[]; +extern unsigned char D_80192320[]; +extern unsigned char D_80192350[]; +extern unsigned char D_80192380[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801923D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80192498[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192520[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192528; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E3128; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E312C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80192558; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192600[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192624[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192614; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192638[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192644[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192654[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019266C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019265C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192680[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8019269C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019268C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801926B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801926C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801926D8; +extern void (*D_80192700[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801926E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8019270C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8019270C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8019274C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8019274C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80192750[])(void); + +void func_80155580(void *a0) { + D_80192750[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80192944[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80192944[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80192BB4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80192BB4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80192BB4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80192BC4[])(void); + +void func_80157544(void *a0) { + D_80192BC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E3160; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E3160 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E3160 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80192BEC[])(void); +extern int D_801E3160; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80192BEC[*(unsigned short *)((char *)param_1 + 2)](); + D_801E3160 = D_801E3160 - 1; + if (D_801E3160 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192BCC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80192BCC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80192BDC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80192BDC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80192C2C[])(void); + +void func_80157DC4(void *a0) { + D_80192C2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80192C34[])(void); + +void func_80157FC4(void *a0) { + D_80192C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80192C00; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80192C00); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80192C40[])(void); + +void func_8015824C(void *a0) { + D_80192C40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80192C10; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80192C10); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E3168; +extern s32 D_801E3174; +extern s32 D_801E3178; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E3168 = 0; + D_801E3174 = 1; + D_801E3178 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E3168; +extern s32 D_801E3174; +extern s32 D_801E3178; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E3168 = 0; + D_801E3174 = 1; + D_801E3178 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80192C7C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80192C7C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E3168; + +void func_80158BB0(void *arg0) { + if (D_801E3168 == 0) { + D_801E3168 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E3174; +extern s32 D_80192C50[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E3174; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80192C50[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E3178; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E3178 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E3168; +extern s32 D_801E3170; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E3168 == 4) { + D_801E3168 = 5; + } + if (D_801E3170 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80192CB8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80192CB8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_801594E8); + + +extern void (*D_80192ECC[])(void); + +void func_80159698(void *a0) { + D_80192ECC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80192CEC)); + func_80028620(1, &(*(u8 *)&D_80192CEC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80192CEC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80192F70[])(void); + +void func_80159968(void *a0) { + D_80192F70[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801930C4[])(void); + +void func_80159B70(void *a0) { + D_801930C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80192EE0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80192EE0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801930CC[])(void); + +void func_8015A264(void *a0) { + D_801930CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80192EF0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80192EF0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_005/ov_SC02_005_jr_8015A3C8.c b/src/ov_SC02_005/ov_SC02_005_jr_8015A3C8.c new file mode 100644 index 000000000..a4bc0e18d --- /dev/null +++ b/src/ov_SC02_005/ov_SC02_005_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192E18; +extern u8 D_80192D88; +extern u8 D_80192D64; +extern u8 D_80192D40; +extern u8 D_80192DF4; +extern u8 D_80192DD0; +extern u8 D_80192DAC; +extern u8 D_80192D1C; +extern void func_80145934(void); +extern u8 D_80192EA8; +extern u8 D_80192E84; +extern u8 D_80192E60; +extern u8 D_80192E3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801922A0[]; +extern unsigned char D_801922D0[]; +extern unsigned char D_80192320[]; +extern unsigned char D_80192350[]; +extern unsigned char D_80192380[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801923D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80192498[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192520[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192528; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E3128; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E312C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80192558; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192600[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192624[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192614; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192638[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192644[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192654[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019266C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019265C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192680[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8019269C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019268C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801926B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801926C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801926D8; +extern void (*D_80192700[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801926E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8019274C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80192750[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80192BB4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80192BC4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E3160; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80192BEC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192BCC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80192BDC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80192C2C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80192C34[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80192C00; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80192C40[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80192C10; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E3168; +extern s32 D_801E3174; +extern s32 D_801E3178; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80192C7C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80192C50[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E3170; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80192ECC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80192CEC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80192F70[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801930C4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80192EE0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801930CC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80192EF0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80192F7C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80192F00; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80192F7C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192F00); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80192F7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80192F10 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80192F10; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80192F10); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801930D4[])(void); + +void func_8015AD3C(void *a0) { + D_801930D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_011/ov_SC02_011_after.c b/src/ov_SC02_011/ov_SC02_011_after.c index 178f4c04c..a0a955307 100644 --- a/src/ov_SC02_011/ov_SC02_011_after.c +++ b/src/ov_SC02_011/ov_SC02_011_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_011/nonmatchings/ov_SC02_011_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80192B5C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80192B5C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80192B9C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80192B9C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80192BA0[])(void); - -void func_80155580(void *a0) { - D_80192BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80192D94[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80192D94[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80193004 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80193004[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80193004[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80193014[])(void); - -void func_80157544(void *a0) { - D_80193014[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EA040; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EA040 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EA040 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8019303C[])(void); -extern int D_801EA040; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8019303C[*(unsigned short *)((char *)param_1 + 2)](); - D_801EA040 = D_801EA040 - 1; - if (D_801EA040 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8019301C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8019301C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8019302C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8019302C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8019307C[])(void); - -void func_80157DC4(void *a0) { - D_8019307C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80193084[])(void); - -void func_80157FC4(void *a0) { - D_80193084[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80193050; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80193050); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80193090[])(void); - -void func_8015824C(void *a0) { - D_80193090[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80193060; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80193060); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EA048; -extern s32 D_801EA054; -extern s32 D_801EA058; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EA048 = 0; - D_801EA054 = 1; - D_801EA058 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EA048; -extern s32 D_801EA054; -extern s32 D_801EA058; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EA048 = 0; - D_801EA054 = 1; - D_801EA058 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801930CC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801930CC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EA048; - -void func_80158BB0(void *arg0) { - if (D_801EA048 == 0) { - D_801EA048 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EA054; -extern s32 D_801930A0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EA054; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801930A0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EA058; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EA058 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EA048; -extern s32 D_801EA050; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EA048 == 4) { - D_801EA048 = 5; - } - if (D_801EA050 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80193108[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80193108; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_801594E8); - - -extern void (*D_8019331C[])(void); - -void func_80159698(void *a0) { - D_8019331C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8019313C)); - func_80028620(1, &(*(u8 *)&D_8019313C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8019313C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801933C0[])(void); - -void func_80159968(void *a0) { - D_801933C0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80193514[])(void); - -void func_80159B70(void *a0) { - D_80193514[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80193330; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80193330); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8019351C[])(void); - -void func_8015A264(void *a0) { - D_8019351C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80193340; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80193340); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801933CC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80193350; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801933CC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80193350)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801933CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80193360 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80193360; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80193360); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80193524[])(void); - -void func_8015AD3C(void *a0) { - D_80193524[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8015444C.c b/src/ov_SC02_011/ov_SC02_011_jr_8015444C.c new file mode 100644 index 000000000..9e3d6fac5 --- /dev/null +++ b/src/ov_SC02_011/ov_SC02_011_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193268; +extern u8 D_801931D8; +extern u8 D_801931B4; +extern u8 D_80193190; +extern u8 D_80193244; +extern u8 D_80193220; +extern u8 D_801931FC; +extern u8 D_8019316C; +extern void func_80145934(void); +extern u8 D_801932F8; +extern u8 D_801932D4; +extern u8 D_801932B0; +extern u8 D_8019328C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801926F0[]; +extern unsigned char D_80192720[]; +extern unsigned char D_80192770[]; +extern unsigned char D_801927A0[]; +extern unsigned char D_801927D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80192820[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801928E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192970[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192978; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA00C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801929A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192A50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192A74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192A64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192A88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192A94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192AA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80192ABC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80192AAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192AD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80192AEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80192ADC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80192B00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192B14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192B28; +extern void (*D_80192B50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80192B30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80192B5C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80192B5C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80192B9C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80192B9C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80192BA0[])(void); + +void func_80155580(void *a0) { + D_80192BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80192D94[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80192D94[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80193004 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80193004[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80193004[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80193014[])(void); + +void func_80157544(void *a0) { + D_80193014[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EA040; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EA040 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EA040 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8019303C[])(void); +extern int D_801EA040; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8019303C[*(unsigned short *)((char *)param_1 + 2)](); + D_801EA040 = D_801EA040 - 1; + if (D_801EA040 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8019301C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8019301C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8019302C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8019302C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8019307C[])(void); + +void func_80157DC4(void *a0) { + D_8019307C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80193084[])(void); + +void func_80157FC4(void *a0) { + D_80193084[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80193050; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80193050); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80193090[])(void); + +void func_8015824C(void *a0) { + D_80193090[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80193060; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80193060); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EA048; +extern s32 D_801EA054; +extern s32 D_801EA058; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EA048 = 0; + D_801EA054 = 1; + D_801EA058 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EA048; +extern s32 D_801EA054; +extern s32 D_801EA058; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EA048 = 0; + D_801EA054 = 1; + D_801EA058 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801930CC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801930CC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EA048; + +void func_80158BB0(void *arg0) { + if (D_801EA048 == 0) { + D_801EA048 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EA054; +extern s32 D_801930A0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EA054; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801930A0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EA058; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EA058 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA048; +extern s32 D_801EA050; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EA048 == 4) { + D_801EA048 = 5; + } + if (D_801EA050 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80193108[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80193108; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_801594E8); + + +extern void (*D_8019331C[])(void); + +void func_80159698(void *a0) { + D_8019331C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8019313C)); + func_80028620(1, &(*(u8 *)&D_8019313C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8019313C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801933C0[])(void); + +void func_80159968(void *a0) { + D_801933C0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80193514[])(void); + +void func_80159B70(void *a0) { + D_80193514[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80193330; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80193330); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8019351C[])(void); + +void func_8015A264(void *a0) { + D_8019351C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80193340; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80193340); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_011/ov_SC02_011_jr_8015A3C8.c b/src/ov_SC02_011/ov_SC02_011_jr_8015A3C8.c new file mode 100644 index 000000000..ccf86397b --- /dev/null +++ b/src/ov_SC02_011/ov_SC02_011_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193268; +extern u8 D_801931D8; +extern u8 D_801931B4; +extern u8 D_80193190; +extern u8 D_80193244; +extern u8 D_80193220; +extern u8 D_801931FC; +extern u8 D_8019316C; +extern void func_80145934(void); +extern u8 D_801932F8; +extern u8 D_801932D4; +extern u8 D_801932B0; +extern u8 D_8019328C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801926F0[]; +extern unsigned char D_80192720[]; +extern unsigned char D_80192770[]; +extern unsigned char D_801927A0[]; +extern unsigned char D_801927D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80192820[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801928E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80192970[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192978; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA00C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801929A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80192A50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192A74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192A64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192A88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192A94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80192AA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80192ABC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80192AAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80192AD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80192AEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80192ADC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80192B00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192B14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192B28; +extern void (*D_80192B50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80192B30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80192B9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80192BA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80193004[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80193014[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EA040; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8019303C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8019301C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8019302C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8019307C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80193084[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80193050; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80193090[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80193060; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EA048; +extern s32 D_801EA054; +extern s32 D_801EA058; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801930CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801930A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA050; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8019331C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8019313C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801933C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80193514[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80193330; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8019351C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80193340; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801933CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80193350; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801933CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80193350)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801933CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80193360 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80193360; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80193360); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80193524[])(void); + +void func_8015AD3C(void *a0) { + D_80193524[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_015/ov_SC02_015_after.c b/src/ov_SC02_015/ov_SC02_015_after.c index 61990ffe4..b6295049a 100644 --- a/src/ov_SC02_015/ov_SC02_015_after.c +++ b/src/ov_SC02_015/ov_SC02_015_after.c @@ -2610,1415 +2610,3 @@ 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_SC02_015/nonmatchings/ov_SC02_015_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180070[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180070[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801800B0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801800B0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801800B4[])(void); - -void func_80155580(void *a0) { - D_801800B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801802A8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801802A8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180518 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180518[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180518[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180528[])(void); - -void func_80157544(void *a0) { - D_80180528[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018F1C0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018F1C0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018F1C0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180550[])(void); -extern int D_8018F1C0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180550[*(unsigned short *)((char *)param_1 + 2)](); - D_8018F1C0 = D_8018F1C0 - 1; - if (D_8018F1C0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180530; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180530); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180540; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180540); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180590[])(void); - -void func_80157DC4(void *a0) { - D_80180590[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180598[])(void); - -void func_80157FC4(void *a0) { - D_80180598[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180564; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180564); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801805A4[])(void); - -void func_8015824C(void *a0) { - D_801805A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180574; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180574); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018F1C8; -extern s32 D_8018F1D4; -extern s32 D_8018F1D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018F1C8 = 0; - D_8018F1D4 = 1; - D_8018F1D8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018F1C8; -extern s32 D_8018F1D4; -extern s32 D_8018F1D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018F1C8 = 0; - D_8018F1D4 = 1; - D_8018F1D8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801805E0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801805E0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018F1C8; - -void func_80158BB0(void *arg0) { - if (D_8018F1C8 == 0) { - D_8018F1C8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018F1D4; -extern s32 D_801805B4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018F1D4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801805B4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018F1D8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018F1D8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018F1C8; -extern s32 D_8018F1D0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018F1C8 == 4) { - D_8018F1C8 = 5; - } - if (D_8018F1D0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018061C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018061C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_801594E8); - - -extern void (*D_80180830[])(void); - -void func_80159698(void *a0) { - D_80180830[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180650)); - func_80028620(1, &(*(u8 *)&D_80180650) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180650) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801808D4[])(void); - -void func_80159968(void *a0) { - D_801808D4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180A28[])(void); - -void func_80159B70(void *a0) { - D_80180A28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80180844; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180844); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180A30[])(void); - -void func_8015A264(void *a0) { - D_80180A30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80180854; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180854); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801808E0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80180864; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801808E0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180864); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801808E0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180874 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180874; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180874); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180A38[])(void); - -void func_8015AD3C(void *a0) { - D_80180A38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8015444C.c b/src/ov_SC02_015/ov_SC02_015_jr_8015444C.c new file mode 100644 index 000000000..7dd75e6e1 --- /dev/null +++ b/src/ov_SC02_015/ov_SC02_015_jr_8015444C.c @@ -0,0 +1,2290 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018077C; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern u8 D_80180758; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_80180680; +extern void func_80145934(void); +extern u8 D_8018080C; +extern u8 D_801807E8; +extern u8 D_801807C4; +extern u8 D_801807A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC04[]; +extern unsigned char D_8017FC34[]; +extern unsigned char D_8017FC84[]; +extern unsigned char D_8017FCB4[]; +extern unsigned char D_8017FCE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FDFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FE84[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FE8C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018F188; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018F18C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FEBC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FF64[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FF88[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FF78; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FF9C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFA8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FFB8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FFD0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FFC0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FFF0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180014[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180028[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018003C; +extern void (*D_80180064[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180044; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180070[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180070[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801800B0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801800B0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801800B4[])(void); + +void func_80155580(void *a0) { + D_801800B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801802A8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801802A8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180518 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180518[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180518[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180528[])(void); + +void func_80157544(void *a0) { + D_80180528[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018F1C0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018F1C0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018F1C0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180550[])(void); +extern int D_8018F1C0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180550[*(unsigned short *)((char *)param_1 + 2)](); + D_8018F1C0 = D_8018F1C0 - 1; + if (D_8018F1C0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180530; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180530); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180540; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180540); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180590[])(void); + +void func_80157DC4(void *a0) { + D_80180590[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180598[])(void); + +void func_80157FC4(void *a0) { + D_80180598[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180564; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180564); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801805A4[])(void); + +void func_8015824C(void *a0) { + D_801805A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180574; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180574); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018F1C8; +extern s32 D_8018F1D4; +extern s32 D_8018F1D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018F1C8 = 0; + D_8018F1D4 = 1; + D_8018F1D8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018F1C8; +extern s32 D_8018F1D4; +extern s32 D_8018F1D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018F1C8 = 0; + D_8018F1D4 = 1; + D_8018F1D8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801805E0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801805E0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018F1C8; + +void func_80158BB0(void *arg0) { + if (D_8018F1C8 == 0) { + D_8018F1C8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018F1D4; +extern s32 D_801805B4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018F1D4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801805B4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018F1D8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018F1D8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018F1C8; +extern s32 D_8018F1D0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018F1C8 == 4) { + D_8018F1C8 = 5; + } + if (D_8018F1D0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018061C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018061C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_801594E8); + + +extern void (*D_80180830[])(void); + +void func_80159698(void *a0) { + D_80180830[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180650)); + func_80028620(1, &(*(u8 *)&D_80180650) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180650) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801808D4[])(void); + +void func_80159968(void *a0) { + D_801808D4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180A28[])(void); + +void func_80159B70(void *a0) { + D_80180A28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80180844; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180844); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180A30[])(void); + +void func_8015A264(void *a0) { + D_80180A30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80180854; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180854); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_015/ov_SC02_015_jr_8015A3C8.c b/src/ov_SC02_015/ov_SC02_015_jr_8015A3C8.c new file mode 100644 index 000000000..c68f72653 --- /dev/null +++ b/src/ov_SC02_015/ov_SC02_015_jr_8015A3C8.c @@ -0,0 +1,1497 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018077C; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern u8 D_80180758; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_80180680; +extern void func_80145934(void); +extern u8 D_8018080C; +extern u8 D_801807E8; +extern u8 D_801807C4; +extern u8 D_801807A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC04[]; +extern unsigned char D_8017FC34[]; +extern unsigned char D_8017FC84[]; +extern unsigned char D_8017FCB4[]; +extern unsigned char D_8017FCE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FDFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FE84[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FE8C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018F188; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018F18C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FEBC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FF64[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FF88[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FF78; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FF9C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFA8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FFB8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FFD0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FFC0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FFF0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180014[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180028[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018003C; +extern void (*D_80180064[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180044; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801800B0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801800B4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180518[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180528[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018F1C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180550[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180530; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180540; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180590[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180598[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180564; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801805A4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180574; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018F1C8; +extern s32 D_8018F1D4; +extern s32 D_8018F1D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801805E0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801805B4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018F1D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180830[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180650[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801808D4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180A28[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180844; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180A30[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180854; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801808E0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180864; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801808E0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180864); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801808E0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180874 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180874; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180874); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180A38[])(void); + +void func_8015AD3C(void *a0) { + D_80180A38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_016/ov_SC02_016_after.c b/src/ov_SC02_016/ov_SC02_016_after.c index 510599f83..67eae3830 100644 --- a/src/ov_SC02_016/ov_SC02_016_after.c +++ b/src/ov_SC02_016/ov_SC02_016_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_016/nonmatchings/ov_SC02_016_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801862A8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801862A8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801862E8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801862E8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801862EC[])(void); - -void func_80155580(void *a0) { - D_801862EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801864E0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801864E0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186750 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186750[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186750[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186760[])(void); - -void func_80157544(void *a0) { - D_80186760[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B2DD8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B2DD8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B2DD8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186788[])(void); -extern int D_801B2DD8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186788[*(unsigned short *)((char *)param_1 + 2)](); - D_801B2DD8 = D_801B2DD8 - 1; - if (D_801B2DD8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186768; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186768); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186778; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186778); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801867C8[])(void); - -void func_80157DC4(void *a0) { - D_801867C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801867D0[])(void); - -void func_80157FC4(void *a0) { - D_801867D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018679C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018679C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801867DC[])(void); - -void func_8015824C(void *a0) { - D_801867DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801867AC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801867AC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B2DE0; -extern s32 D_801B2DEC; -extern s32 D_801B2DF0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B2DE0 = 0; - D_801B2DEC = 1; - D_801B2DF0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B2DE0; -extern s32 D_801B2DEC; -extern s32 D_801B2DF0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B2DE0 = 0; - D_801B2DEC = 1; - D_801B2DF0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80186818[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80186818[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B2DE0; - -void func_80158BB0(void *arg0) { - if (D_801B2DE0 == 0) { - D_801B2DE0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B2DEC; -extern s32 D_801867EC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B2DEC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801867EC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B2DF0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B2DF0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B2DE0; -extern s32 D_801B2DE8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B2DE0 == 4) { - D_801B2DE0 = 5; - } - if (D_801B2DE8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186854[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186854; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_801594E8); - - -extern void (*D_80186A68[])(void); - -void func_80159698(void *a0) { - D_80186A68[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186888)); - func_80028620(1, &(*(u8 *)&D_80186888) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186888) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186B0C[])(void); - -void func_80159968(void *a0) { - D_80186B0C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186C60[])(void); - -void func_80159B70(void *a0) { - D_80186C60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186A7C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186A7C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80186C68[])(void); - -void func_8015A264(void *a0) { - D_80186C68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186A8C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186A8C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186B18[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_80186A9C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186B18[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186A9C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186B18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186AAC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186AAC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186AAC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186C70[])(void); - -void func_8015AD3C(void *a0) { - D_80186C70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8015444C.c b/src/ov_SC02_016/ov_SC02_016_jr_8015444C.c new file mode 100644 index 000000000..5fa3ea932 --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801869B4; +extern u8 D_80186924; +extern u8 D_80186900; +extern u8 D_801868DC; +extern u8 D_80186990; +extern u8 D_8018696C; +extern u8 D_80186948; +extern u8 D_801868B8; +extern void func_80145934(void); +extern u8 D_80186A44; +extern u8 D_80186A20; +extern u8 D_801869FC; +extern u8 D_801869D8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E3C[]; +extern unsigned char D_80185E6C[]; +extern unsigned char D_80185EBC[]; +extern unsigned char D_80185EEC[]; +extern unsigned char D_80185F1C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185F6C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186034[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801860BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801860C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2DA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B2DA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801860F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018619C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801861C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801861B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801861D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801861E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801861F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186208[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801861F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018621C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186238[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186228; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018624C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186260[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186274; +extern void (*D_8018629C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018627C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801862A8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801862A8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801862E8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801862E8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801862EC[])(void); + +void func_80155580(void *a0) { + D_801862EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801864E0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801864E0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186750 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186750[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186750[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186760[])(void); + +void func_80157544(void *a0) { + D_80186760[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B2DD8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B2DD8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B2DD8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186788[])(void); +extern int D_801B2DD8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186788[*(unsigned short *)((char *)param_1 + 2)](); + D_801B2DD8 = D_801B2DD8 - 1; + if (D_801B2DD8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186768; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186768); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186778; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186778); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801867C8[])(void); + +void func_80157DC4(void *a0) { + D_801867C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801867D0[])(void); + +void func_80157FC4(void *a0) { + D_801867D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018679C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018679C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801867DC[])(void); + +void func_8015824C(void *a0) { + D_801867DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801867AC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801867AC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B2DE0; +extern s32 D_801B2DEC; +extern s32 D_801B2DF0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B2DE0 = 0; + D_801B2DEC = 1; + D_801B2DF0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B2DE0; +extern s32 D_801B2DEC; +extern s32 D_801B2DF0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B2DE0 = 0; + D_801B2DEC = 1; + D_801B2DF0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80186818[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80186818[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B2DE0; + +void func_80158BB0(void *arg0) { + if (D_801B2DE0 == 0) { + D_801B2DE0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B2DEC; +extern s32 D_801867EC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B2DEC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801867EC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B2DF0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B2DF0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2DE0; +extern s32 D_801B2DE8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B2DE0 == 4) { + D_801B2DE0 = 5; + } + if (D_801B2DE8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186854[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186854; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_801594E8); + + +extern void (*D_80186A68[])(void); + +void func_80159698(void *a0) { + D_80186A68[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186888)); + func_80028620(1, &(*(u8 *)&D_80186888) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186888) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186B0C[])(void); + +void func_80159968(void *a0) { + D_80186B0C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186C60[])(void); + +void func_80159B70(void *a0) { + D_80186C60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186A7C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186A7C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80186C68[])(void); + +void func_8015A264(void *a0) { + D_80186C68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186A8C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186A8C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_016/ov_SC02_016_jr_8015A3C8.c b/src/ov_SC02_016/ov_SC02_016_jr_8015A3C8.c new file mode 100644 index 000000000..036bc66aa --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801869B4; +extern u8 D_80186924; +extern u8 D_80186900; +extern u8 D_801868DC; +extern u8 D_80186990; +extern u8 D_8018696C; +extern u8 D_80186948; +extern u8 D_801868B8; +extern void func_80145934(void); +extern u8 D_80186A44; +extern u8 D_80186A20; +extern u8 D_801869FC; +extern u8 D_801869D8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E3C[]; +extern unsigned char D_80185E6C[]; +extern unsigned char D_80185EBC[]; +extern unsigned char D_80185EEC[]; +extern unsigned char D_80185F1C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185F6C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186034[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801860BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801860C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2DA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B2DA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801860F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018619C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801861C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801861B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801861D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801861E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801861F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186208[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801861F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018621C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186238[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186228; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018624C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186260[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186274; +extern void (*D_8018629C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018627C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801862E8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801862EC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186750[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186760[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B2DD8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186788[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186768; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186778; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801867C8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801867D0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018679C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801867DC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801867AC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B2DE0; +extern s32 D_801B2DEC; +extern s32 D_801B2DF0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186818[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801867EC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2DE8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186A68[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186888[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186B0C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186C60[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186A7C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186C68[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186A8C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186B18[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80186A9C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186B18[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186A9C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186B18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186AAC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186AAC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186AAC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186C70[])(void); + +void func_8015AD3C(void *a0) { + D_80186C70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_017/ov_SC02_017_after.c b/src/ov_SC02_017/ov_SC02_017_after.c index faa648a3f..47a42a306 100644 --- a/src/ov_SC02_017/ov_SC02_017_after.c +++ b/src/ov_SC02_017/ov_SC02_017_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_017/nonmatchings/ov_SC02_017_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018C300[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018C300[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018C340[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018C340[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018C344[])(void); - -void func_80155580(void *a0) { - D_8018C344[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018C538[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018C538[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018C7A8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018C7A8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018C7A8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018C7B8[])(void); - -void func_80157544(void *a0) { - D_8018C7B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EE600; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EE600 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EE600 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018C7E0[])(void); -extern int D_801EE600; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018C7E0[*(unsigned short *)((char *)param_1 + 2)](); - D_801EE600 = D_801EE600 - 1; - if (D_801EE600 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018C7C0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018C7C0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018C7D0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018C7D0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018C820[])(void); - -void func_80157DC4(void *a0) { - D_8018C820[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018C828[])(void); - -void func_80157FC4(void *a0) { - D_8018C828[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018C7F4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018C7F4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018C834[])(void); - -void func_8015824C(void *a0) { - D_8018C834[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018C804; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018C804); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EE608; -extern s32 D_801EE614; -extern s32 D_801EE618; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EE608 = 0; - D_801EE614 = 1; - D_801EE618 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EE608; -extern s32 D_801EE614; -extern s32 D_801EE618; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EE608 = 0; - D_801EE614 = 1; - D_801EE618 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018C870[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018C870[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EE608; - -void func_80158BB0(void *arg0) { - if (D_801EE608 == 0) { - D_801EE608 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EE614; -extern s32 D_8018C844[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EE614; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018C844[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EE618; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EE618 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EE608; -extern s32 D_801EE610; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EE608 == 4) { - D_801EE608 = 5; - } - if (D_801EE610 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018C8AC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018C8AC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_801594E8); - - -extern void (*D_8018CAC0[])(void); - -void func_80159698(void *a0) { - D_8018CAC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018C8E0)); - func_80028620(1, &(*(u8 *)&D_8018C8E0) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018C8E0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018CB64[])(void); - -void func_80159968(void *a0) { - D_8018CB64[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018CCB8[])(void); - -void func_80159B70(void *a0) { - D_8018CCB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018CAD4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018CAD4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018CCC0[])(void); - -void func_8015A264(void *a0) { - D_8018CCC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018CAE4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018CAE4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018CB70[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u16 *D_8018CAF4[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018CB70[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018CAF4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018CB70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018CB04 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018CB04; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018CB04); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018CCC8[])(void); - -void func_8015AD3C(void *a0) { - D_8018CCC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8015444C.c b/src/ov_SC02_017/ov_SC02_017_jr_8015444C.c new file mode 100644 index 000000000..6994de158 --- /dev/null +++ b/src/ov_SC02_017/ov_SC02_017_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018CA0C; +extern u8 D_8018C97C; +extern u8 D_8018C958; +extern u8 D_8018C934; +extern u8 D_8018C9E8; +extern u8 D_8018C9C4; +extern u8 D_8018C9A0; +extern u8 D_8018C910; +extern void func_80145934(void); +extern u8 D_8018CA9C; +extern u8 D_8018CA78; +extern u8 D_8018CA54; +extern u8 D_8018CA30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BE94[]; +extern unsigned char D_8018BEC4[]; +extern unsigned char D_8018BF14[]; +extern unsigned char D_8018BF44[]; +extern unsigned char D_8018BF74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BFC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C08C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C114[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C11C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EE5C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EE5CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C14C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C1F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C218[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C208; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C22C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C238[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C248[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C260[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C250; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C274[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C290[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C280; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C2A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C2B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C2CC; +extern void (*D_8018C2F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C2D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018C300[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018C300[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018C340[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018C340[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018C344[])(void); + +void func_80155580(void *a0) { + D_8018C344[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018C538[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018C538[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018C7A8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C7A8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018C7A8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018C7B8[])(void); + +void func_80157544(void *a0) { + D_8018C7B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EE600; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EE600 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EE600 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018C7E0[])(void); +extern int D_801EE600; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018C7E0[*(unsigned short *)((char *)param_1 + 2)](); + D_801EE600 = D_801EE600 - 1; + if (D_801EE600 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C7C0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018C7C0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018C7D0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018C7D0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018C820[])(void); + +void func_80157DC4(void *a0) { + D_8018C820[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018C828[])(void); + +void func_80157FC4(void *a0) { + D_8018C828[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018C7F4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018C7F4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018C834[])(void); + +void func_8015824C(void *a0) { + D_8018C834[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018C804; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018C804); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EE608; +extern s32 D_801EE614; +extern s32 D_801EE618; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EE608 = 0; + D_801EE614 = 1; + D_801EE618 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EE608; +extern s32 D_801EE614; +extern s32 D_801EE618; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EE608 = 0; + D_801EE614 = 1; + D_801EE618 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018C870[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018C870[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EE608; + +void func_80158BB0(void *arg0) { + if (D_801EE608 == 0) { + D_801EE608 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EE614; +extern s32 D_8018C844[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EE614; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018C844[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EE618; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EE618 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EE608; +extern s32 D_801EE610; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EE608 == 4) { + D_801EE608 = 5; + } + if (D_801EE610 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018C8AC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018C8AC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_801594E8); + + +extern void (*D_8018CAC0[])(void); + +void func_80159698(void *a0) { + D_8018CAC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018C8E0)); + func_80028620(1, &(*(u8 *)&D_8018C8E0) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018C8E0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018CB64[])(void); + +void func_80159968(void *a0) { + D_8018CB64[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018CCB8[])(void); + +void func_80159B70(void *a0) { + D_8018CCB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018CAD4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018CAD4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018CCC0[])(void); + +void func_8015A264(void *a0) { + D_8018CCC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018CAE4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018CAE4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8015A3C8.c b/src/ov_SC02_017/ov_SC02_017_jr_8015A3C8.c new file mode 100644 index 000000000..76a37be33 --- /dev/null +++ b/src/ov_SC02_017/ov_SC02_017_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018CA0C; +extern u8 D_8018C97C; +extern u8 D_8018C958; +extern u8 D_8018C934; +extern u8 D_8018C9E8; +extern u8 D_8018C9C4; +extern u8 D_8018C9A0; +extern u8 D_8018C910; +extern void func_80145934(void); +extern u8 D_8018CA9C; +extern u8 D_8018CA78; +extern u8 D_8018CA54; +extern u8 D_8018CA30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BE94[]; +extern unsigned char D_8018BEC4[]; +extern unsigned char D_8018BF14[]; +extern unsigned char D_8018BF44[]; +extern unsigned char D_8018BF74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BFC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C08C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C114[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C11C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EE5C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EE5CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C14C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C1F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C218[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C208; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C22C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C238[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C248[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C260[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C250; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C274[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C290[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C280; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C2A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C2B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C2CC; +extern void (*D_8018C2F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C2D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018C340[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018C344[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C7A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018C7B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EE600; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018C7E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C7C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018C7D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018C820[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018C828[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018C7F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018C834[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018C804; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EE608; +extern s32 D_801EE614; +extern s32 D_801EE618; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018C870[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018C844[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EE610; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018CAC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018C8E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018CB64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018CCB8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018CAD4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018CCC0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018CAE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018CB70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 *D_8018CAF4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018CB70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018CAF4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018CB70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018CB04 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018CB04; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018CB04); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018CCC8[])(void); + +void func_8015AD3C(void *a0) { + D_8018CCC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_021/ov_SC02_021_after.c b/src/ov_SC02_021/ov_SC02_021_after.c index 4aea00b9f..e05a4267a 100644 --- a/src/ov_SC02_021/ov_SC02_021_after.c +++ b/src/ov_SC02_021/ov_SC02_021_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_021/nonmatchings/ov_SC02_021_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801818F4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801818F4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181934[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181934[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181938[])(void); - -void func_80155580(void *a0) { - D_80181938[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181B2C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181B2C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181D9C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80181D9C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80181D9C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80181DAC[])(void); - -void func_80157544(void *a0) { - D_80181DAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80191B70; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80191B70 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80191B70 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181DD4[])(void); -extern int D_80191B70; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181DD4[*(unsigned short *)((char *)param_1 + 2)](); - D_80191B70 = D_80191B70 - 1; - if (D_80191B70 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181DB4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181DB4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181DC4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181DC4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181E14[])(void); - -void func_80157DC4(void *a0) { - D_80181E14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181E1C[])(void); - -void func_80157FC4(void *a0) { - D_80181E1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181DE8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181DE8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80181E28[])(void); - -void func_8015824C(void *a0) { - D_80181E28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80181DF8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181DF8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80191B78; -extern s32 D_80191B84; -extern s32 D_80191B88; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80191B78 = 0; - D_80191B84 = 1; - D_80191B88 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80191B78; -extern s32 D_80191B84; -extern s32 D_80191B88; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80191B78 = 0; - D_80191B84 = 1; - D_80191B88 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181E64[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181E64[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80191B78; - -void func_80158BB0(void *arg0) { - if (D_80191B78 == 0) { - D_80191B78 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80191B84; -extern s32 D_80181E38[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80191B84; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181E38[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80191B88; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80191B88 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80191B78; -extern s32 D_80191B80; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80191B78 == 4) { - D_80191B78 = 5; - } - if (D_80191B80 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181EA0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181EA0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_801594E8); - - -extern void (*D_801820B4[])(void); - -void func_80159698(void *a0) { - D_801820B4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181ED4)); - func_80028620(1, &(*(u8 *)&D_80181ED4) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181ED4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80182158[])(void); - -void func_80159968(void *a0) { - D_80182158[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801822AC[])(void); - -void func_80159B70(void *a0) { - D_801822AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801820C8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801820C8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801822B4[])(void); - -void func_8015A264(void *a0) { - D_801822B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801820D8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801820D8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182164[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801820E8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182164[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801820E8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182164[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801820F8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801820F8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801820F8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801822BC[])(void); - -void func_8015AD3C(void *a0) { - D_801822BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8015444C.c b/src/ov_SC02_021/ov_SC02_021_jr_8015444C.c new file mode 100644 index 000000000..2cb0ece9a --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182000; +extern u8 D_80181F70; +extern u8 D_80181F4C; +extern u8 D_80181F28; +extern u8 D_80181FDC; +extern u8 D_80181FB8; +extern u8 D_80181F94; +extern u8 D_80181F04; +extern void func_80145934(void); +extern u8 D_80182090; +extern u8 D_8018206C; +extern u8 D_80182048; +extern u8 D_80182024; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181488[]; +extern unsigned char D_801814B8[]; +extern unsigned char D_80181508[]; +extern unsigned char D_80181538[]; +extern unsigned char D_80181568[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801815B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181680[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181708[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181710; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80191B38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80191B3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181740; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801817E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018180C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801817FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181820[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018182C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018183C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181854[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181844; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181868[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181884[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181874; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181898[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801818AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801818C0; +extern void (*D_801818E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801818C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801818F4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801818F4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181934[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181934[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181938[])(void); + +void func_80155580(void *a0) { + D_80181938[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181B2C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181B2C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181D9C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80181D9C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80181D9C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80181DAC[])(void); + +void func_80157544(void *a0) { + D_80181DAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80191B70; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80191B70 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80191B70 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181DD4[])(void); +extern int D_80191B70; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181DD4[*(unsigned short *)((char *)param_1 + 2)](); + D_80191B70 = D_80191B70 - 1; + if (D_80191B70 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181DB4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181DB4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181DC4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181DC4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181E14[])(void); + +void func_80157DC4(void *a0) { + D_80181E14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181E1C[])(void); + +void func_80157FC4(void *a0) { + D_80181E1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181DE8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181DE8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80181E28[])(void); + +void func_8015824C(void *a0) { + D_80181E28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80181DF8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181DF8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80191B78; +extern s32 D_80191B84; +extern s32 D_80191B88; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80191B78 = 0; + D_80191B84 = 1; + D_80191B88 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80191B78; +extern s32 D_80191B84; +extern s32 D_80191B88; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80191B78 = 0; + D_80191B84 = 1; + D_80191B88 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181E64[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181E64[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80191B78; + +void func_80158BB0(void *arg0) { + if (D_80191B78 == 0) { + D_80191B78 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80191B84; +extern s32 D_80181E38[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80191B84; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181E38[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80191B88; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80191B88 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80191B78; +extern s32 D_80191B80; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80191B78 == 4) { + D_80191B78 = 5; + } + if (D_80191B80 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181EA0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181EA0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_801594E8); + + +extern void (*D_801820B4[])(void); + +void func_80159698(void *a0) { + D_801820B4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181ED4)); + func_80028620(1, &(*(u8 *)&D_80181ED4) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181ED4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80182158[])(void); + +void func_80159968(void *a0) { + D_80182158[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801822AC[])(void); + +void func_80159B70(void *a0) { + D_801822AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801820C8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801820C8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801822B4[])(void); + +void func_8015A264(void *a0) { + D_801822B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801820D8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801820D8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8015A3C8.c b/src/ov_SC02_021/ov_SC02_021_jr_8015A3C8.c new file mode 100644 index 000000000..57f63420c --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182000; +extern u8 D_80181F70; +extern u8 D_80181F4C; +extern u8 D_80181F28; +extern u8 D_80181FDC; +extern u8 D_80181FB8; +extern u8 D_80181F94; +extern u8 D_80181F04; +extern void func_80145934(void); +extern u8 D_80182090; +extern u8 D_8018206C; +extern u8 D_80182048; +extern u8 D_80182024; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181488[]; +extern unsigned char D_801814B8[]; +extern unsigned char D_80181508[]; +extern unsigned char D_80181538[]; +extern unsigned char D_80181568[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801815B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181680[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181708[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181710; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80191B38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80191B3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181740; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801817E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018180C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801817FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181820[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018182C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018183C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181854[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181844; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181868[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181884[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181874; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181898[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801818AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801818C0; +extern void (*D_801818E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801818C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181934[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181938[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181D9C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181DAC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80191B70; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181DD4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181DB4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181DC4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181E14[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181E1C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181DE8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181E28[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181DF8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80191B78; +extern s32 D_80191B84; +extern s32 D_80191B88; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181E64[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181E38[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80191B80; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801820B4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181ED4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182158[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801822AC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801820C8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801822B4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801820D8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182164[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801820E8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182164[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801820E8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182164[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801820F8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801820F8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801820F8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801822BC[])(void); + +void func_8015AD3C(void *a0) { + D_801822BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_026/ov_SC02_026_after.c b/src/ov_SC02_026/ov_SC02_026_after.c index 5cf4250cd..42e344eb8 100644 --- a/src/ov_SC02_026/ov_SC02_026_after.c +++ b/src/ov_SC02_026/ov_SC02_026_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_026/nonmatchings/ov_SC02_026_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187F48[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187F48[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187F88[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187F88[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187F8C[])(void); - -void func_80155580(void *a0) { - D_80187F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80188180[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80188180[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801883F0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801883F0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801883F0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188400[])(void); - -void func_80157544(void *a0) { - D_80188400[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CEFB0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CEFB0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CEFB0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80188428[])(void); -extern int D_801CEFB0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80188428[*(unsigned short *)((char *)param_1 + 2)](); - D_801CEFB0 = D_801CEFB0 - 1; - if (D_801CEFB0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188408; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188408); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188418; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188418); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188468[])(void); - -void func_80157DC4(void *a0) { - D_80188468[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80188470[])(void); - -void func_80157FC4(void *a0) { - D_80188470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018843C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018843C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018847C[])(void); - -void func_8015824C(void *a0) { - D_8018847C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018844C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018844C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CEFB8; -extern s32 D_801CEFC4; -extern s32 D_801CEFC8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CEFB8 = 0; - D_801CEFC4 = 1; - D_801CEFC8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CEFB8; -extern s32 D_801CEFC4; -extern s32 D_801CEFC8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CEFB8 = 0; - D_801CEFC4 = 1; - D_801CEFC8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801884B8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801884B8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CEFB8; - -void func_80158BB0(void *arg0) { - if (D_801CEFB8 == 0) { - D_801CEFB8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CEFC4; -extern s32 D_8018848C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CEFC4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018848C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CEFC8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CEFC8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CEFB8; -extern s32 D_801CEFC0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CEFB8 == 4) { - D_801CEFB8 = 5; - } - if (D_801CEFC0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801884F4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801884F4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_801594E8); - - -extern void (*D_80188708[])(void); - -void func_80159698(void *a0) { - D_80188708[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80188528)); - func_80028620(1, &(*(u8 *)&D_80188528) + 0x10); - func_80028620(2, &(*(u8 *)&D_80188528) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801887AC[])(void); - -void func_80159968(void *a0) { - D_801887AC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80188900[])(void); - -void func_80159B70(void *a0) { - D_80188900[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018871C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018871C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188908[])(void); - -void func_8015A264(void *a0) { - D_80188908[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018872C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018872C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801887B8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_8018873C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801887B8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018873C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801887B8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018874C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018874C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018874C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188910[])(void); - -void func_8015AD3C(void *a0) { - D_80188910[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8015444C.c b/src/ov_SC02_026/ov_SC02_026_jr_8015444C.c new file mode 100644 index 000000000..229f79735 --- /dev/null +++ b/src/ov_SC02_026/ov_SC02_026_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188654; +extern u8 D_801885C4; +extern u8 D_801885A0; +extern u8 D_8018857C; +extern u8 D_80188630; +extern u8 D_8018860C; +extern u8 D_801885E8; +extern u8 D_80188558; +extern void func_80145934(void); +extern u8 D_801886E4; +extern u8 D_801886C0; +extern u8 D_8018869C; +extern u8 D_80188678; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187ADC[]; +extern unsigned char D_80187B0C[]; +extern unsigned char D_80187B5C[]; +extern unsigned char D_80187B8C[]; +extern unsigned char D_80187BBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187CD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187D5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187D64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CEF78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CEF7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187D94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187E3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187E60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187E50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187E74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187E80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187E90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187EA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187E98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187EBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187EC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187EEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F00[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F14; +extern void (*D_80187F3C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F1C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187F48[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187F48[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187F88[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187F88[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187F8C[])(void); + +void func_80155580(void *a0) { + D_80187F8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80188180[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80188180[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801883F0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801883F0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801883F0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188400[])(void); + +void func_80157544(void *a0) { + D_80188400[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CEFB0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CEFB0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CEFB0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80188428[])(void); +extern int D_801CEFB0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80188428[*(unsigned short *)((char *)param_1 + 2)](); + D_801CEFB0 = D_801CEFB0 - 1; + if (D_801CEFB0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188408; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188408); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188418; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188418); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188468[])(void); + +void func_80157DC4(void *a0) { + D_80188468[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80188470[])(void); + +void func_80157FC4(void *a0) { + D_80188470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018843C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018843C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018847C[])(void); + +void func_8015824C(void *a0) { + D_8018847C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018844C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018844C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CEFB8; +extern s32 D_801CEFC4; +extern s32 D_801CEFC8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CEFB8 = 0; + D_801CEFC4 = 1; + D_801CEFC8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CEFB8; +extern s32 D_801CEFC4; +extern s32 D_801CEFC8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CEFB8 = 0; + D_801CEFC4 = 1; + D_801CEFC8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801884B8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801884B8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CEFB8; + +void func_80158BB0(void *arg0) { + if (D_801CEFB8 == 0) { + D_801CEFB8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CEFC4; +extern s32 D_8018848C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CEFC4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018848C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CEFC8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CEFC8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CEFB8; +extern s32 D_801CEFC0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CEFB8 == 4) { + D_801CEFB8 = 5; + } + if (D_801CEFC0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801884F4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801884F4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_801594E8); + + +extern void (*D_80188708[])(void); + +void func_80159698(void *a0) { + D_80188708[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80188528)); + func_80028620(1, &(*(u8 *)&D_80188528) + 0x10); + func_80028620(2, &(*(u8 *)&D_80188528) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801887AC[])(void); + +void func_80159968(void *a0) { + D_801887AC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80188900[])(void); + +void func_80159B70(void *a0) { + D_80188900[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018871C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018871C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188908[])(void); + +void func_8015A264(void *a0) { + D_80188908[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018872C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018872C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_026/ov_SC02_026_jr_8015A3C8.c b/src/ov_SC02_026/ov_SC02_026_jr_8015A3C8.c new file mode 100644 index 000000000..08ee155ad --- /dev/null +++ b/src/ov_SC02_026/ov_SC02_026_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188654; +extern u8 D_801885C4; +extern u8 D_801885A0; +extern u8 D_8018857C; +extern u8 D_80188630; +extern u8 D_8018860C; +extern u8 D_801885E8; +extern u8 D_80188558; +extern void func_80145934(void); +extern u8 D_801886E4; +extern u8 D_801886C0; +extern u8 D_8018869C; +extern u8 D_80188678; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187ADC[]; +extern unsigned char D_80187B0C[]; +extern unsigned char D_80187B5C[]; +extern unsigned char D_80187B8C[]; +extern unsigned char D_80187BBC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C0C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187CD4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187D5C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187D64; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CEF78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CEF7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187D94; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187E3C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187E60[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187E50; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187E74[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187E80[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187E90[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187EA8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187E98; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187EBC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187EC8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187EEC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F00[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F14; +extern void (*D_80187F3C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F1C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187F88[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187F8C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801883F0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188400[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CEFB0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188428[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188408; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188418; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188468[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188470[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018843C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018847C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018844C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CEFB8; +extern s32 D_801CEFC4; +extern s32 D_801CEFC8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801884B8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018848C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CEFC0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188708[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188528[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801887AC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188900[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018871C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188908[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018872C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801887B8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018873C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801887B8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018873C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801887B8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018874C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018874C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018874C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188910[])(void); + +void func_8015AD3C(void *a0) { + D_80188910[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_027/ov_SC02_027_after.c b/src/ov_SC02_027/ov_SC02_027_after.c index 64adcc0c8..640ead233 100644 --- a/src/ov_SC02_027/ov_SC02_027_after.c +++ b/src/ov_SC02_027/ov_SC02_027_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_027/nonmatchings/ov_SC02_027_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D06C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D06C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D0AC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D0AC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D0B0[])(void); - -void func_80155580(void *a0) { - D_8018D0B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018D2A4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018D2A4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D514 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018D514[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018D514[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018D524[])(void); - -void func_80157544(void *a0) { - D_8018D524[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D8D20; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D8D20 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D8D20 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018D54C[])(void); -extern int D_801D8D20; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018D54C[*(unsigned short *)((char *)param_1 + 2)](); - D_801D8D20 = D_801D8D20 - 1; - if (D_801D8D20 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018D52C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D52C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018D53C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D53C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018D58C[])(void); - -void func_80157DC4(void *a0) { - D_8018D58C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018D594[])(void); - -void func_80157FC4(void *a0) { - D_8018D594[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018D560; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018D560); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018D5A0[])(void); - -void func_8015824C(void *a0) { - D_8018D5A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018D570; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D570); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D8D28; -extern s32 D_801D8D34; -extern s32 D_801D8D38; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D8D28 = 0; - D_801D8D34 = 1; - D_801D8D38 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D8D28; -extern s32 D_801D8D34; -extern s32 D_801D8D38; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D8D28 = 0; - D_801D8D34 = 1; - D_801D8D38 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018D5DC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018D5DC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D8D28; - -void func_80158BB0(void *arg0) { - if (D_801D8D28 == 0) { - D_801D8D28 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D8D34; -extern s32 D_8018D5B0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D8D34; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D5B0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D8D38; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D8D38 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D8D28; -extern s32 D_801D8D30; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D8D28 == 4) { - D_801D8D28 = 5; - } - if (D_801D8D30 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018D618[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018D618; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_801594E8); - - -extern void (*D_8018D82C[])(void); - -void func_80159698(void *a0) { - D_8018D82C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D64C)); - func_80028620(1, &(*(u8 *)&D_8018D64C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D64C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018D8D0[])(void); - -void func_80159968(void *a0) { - D_8018D8D0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018DA24[])(void); - -void func_80159B70(void *a0) { - D_8018DA24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018D840; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D840); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018DA2C[])(void); - -void func_8015A264(void *a0) { - D_8018DA2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018D850; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D850); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018D8DC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018D860; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D860); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018D8DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D870 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018D870; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018D870); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018DA34[])(void); - -void func_8015AD3C(void *a0) { - D_8018DA34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8015444C.c b/src/ov_SC02_027/ov_SC02_027_jr_8015444C.c new file mode 100644 index 000000000..29885e0b2 --- /dev/null +++ b/src/ov_SC02_027/ov_SC02_027_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D778; +extern u8 D_8018D6E8; +extern u8 D_8018D6C4; +extern u8 D_8018D6A0; +extern u8 D_8018D754; +extern u8 D_8018D730; +extern u8 D_8018D70C; +extern u8 D_8018D67C; +extern void func_80145934(void); +extern u8 D_8018D808; +extern u8 D_8018D7E4; +extern u8 D_8018D7C0; +extern u8 D_8018D79C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CC00[]; +extern unsigned char D_8018CC30[]; +extern unsigned char D_8018CC80[]; +extern unsigned char D_8018CCB0[]; +extern unsigned char D_8018CCE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CD30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CDF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018CE80[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018CE88; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8CE8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D8CEC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018CEB8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018CF60[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CF84[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018CF74; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CF98[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CFA4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CFB4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CFCC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CFBC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CFE0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CFFC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CFEC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D010[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D024[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D038; +extern void (*D_8018D060[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D040; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D06C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D06C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D0AC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D0AC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D0B0[])(void); + +void func_80155580(void *a0) { + D_8018D0B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018D2A4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018D2A4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D514 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D514[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018D514[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018D524[])(void); + +void func_80157544(void *a0) { + D_8018D524[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D8D20; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D8D20 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D8D20 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018D54C[])(void); +extern int D_801D8D20; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018D54C[*(unsigned short *)((char *)param_1 + 2)](); + D_801D8D20 = D_801D8D20 - 1; + if (D_801D8D20 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D52C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D52C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018D53C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D53C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018D58C[])(void); + +void func_80157DC4(void *a0) { + D_8018D58C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018D594[])(void); + +void func_80157FC4(void *a0) { + D_8018D594[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018D560; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018D560); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018D5A0[])(void); + +void func_8015824C(void *a0) { + D_8018D5A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018D570; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D570); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D8D28; +extern s32 D_801D8D34; +extern s32 D_801D8D38; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D8D28 = 0; + D_801D8D34 = 1; + D_801D8D38 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D8D28; +extern s32 D_801D8D34; +extern s32 D_801D8D38; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D8D28 = 0; + D_801D8D34 = 1; + D_801D8D38 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018D5DC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018D5DC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D8D28; + +void func_80158BB0(void *arg0) { + if (D_801D8D28 == 0) { + D_801D8D28 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D8D34; +extern s32 D_8018D5B0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D8D34; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D5B0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D8D38; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D8D38 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8D28; +extern s32 D_801D8D30; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D8D28 == 4) { + D_801D8D28 = 5; + } + if (D_801D8D30 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018D618[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018D618; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_801594E8); + + +extern void (*D_8018D82C[])(void); + +void func_80159698(void *a0) { + D_8018D82C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D64C)); + func_80028620(1, &(*(u8 *)&D_8018D64C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D64C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018D8D0[])(void); + +void func_80159968(void *a0) { + D_8018D8D0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018DA24[])(void); + +void func_80159B70(void *a0) { + D_8018DA24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018D840; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D840); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018DA2C[])(void); + +void func_8015A264(void *a0) { + D_8018DA2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018D850; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D850); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8015A3C8.c b/src/ov_SC02_027/ov_SC02_027_jr_8015A3C8.c new file mode 100644 index 000000000..0b60c1265 --- /dev/null +++ b/src/ov_SC02_027/ov_SC02_027_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D778; +extern u8 D_8018D6E8; +extern u8 D_8018D6C4; +extern u8 D_8018D6A0; +extern u8 D_8018D754; +extern u8 D_8018D730; +extern u8 D_8018D70C; +extern u8 D_8018D67C; +extern void func_80145934(void); +extern u8 D_8018D808; +extern u8 D_8018D7E4; +extern u8 D_8018D7C0; +extern u8 D_8018D79C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CC00[]; +extern unsigned char D_8018CC30[]; +extern unsigned char D_8018CC80[]; +extern unsigned char D_8018CCB0[]; +extern unsigned char D_8018CCE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CD30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CDF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018CE80[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018CE88; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8CE8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D8CEC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018CEB8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018CF60[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CF84[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018CF74; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CF98[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CFA4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CFB4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CFCC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CFBC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CFE0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CFFC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CFEC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D010[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D024[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D038; +extern void (*D_8018D060[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D040; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D0AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D0B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D514[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D524[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D8D20; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D54C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D52C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D53C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D58C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D594[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D560; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D5A0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D570; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D8D28; +extern s32 D_801D8D34; +extern s32 D_801D8D38; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D5DC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D5B0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8D30; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D82C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D64C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D8D0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DA24[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D840; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DA2C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D850; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D8DC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D860; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D860); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D8DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D870 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D870; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018D870); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018DA34[])(void); + +void func_8015AD3C(void *a0) { + D_8018DA34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_028/ov_SC02_028_after.c b/src/ov_SC02_028/ov_SC02_028_after.c index 847f9815a..24c871f60 100644 --- a/src/ov_SC02_028/ov_SC02_028_after.c +++ b/src/ov_SC02_028/ov_SC02_028_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_028/nonmatchings/ov_SC02_028_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D270[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D270[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D2B0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D2B0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D2B4[])(void); - -void func_80155580(void *a0) { - D_8018D2B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018D4A8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018D4A8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D718 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018D718[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018D718[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018D728[])(void); - -void func_80157544(void *a0) { - D_8018D728[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D1CC0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D1CC0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D1CC0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018D750[])(void); -extern int D_801D1CC0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018D750[*(unsigned short *)((char *)param_1 + 2)](); - D_801D1CC0 = D_801D1CC0 - 1; - if (D_801D1CC0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018D730; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D730); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018D740; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D740); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018D790[])(void); - -void func_80157DC4(void *a0) { - D_8018D790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018D798[])(void); - -void func_80157FC4(void *a0) { - D_8018D798[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018D764; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018D764); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018D7A4[])(void); - -void func_8015824C(void *a0) { - D_8018D7A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018D774; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D774); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D1CC8; -extern s32 D_801D1CD4; -extern s32 D_801D1CD8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D1CC8 = 0; - D_801D1CD4 = 1; - D_801D1CD8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D1CC8; -extern s32 D_801D1CD4; -extern s32 D_801D1CD8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D1CC8 = 0; - D_801D1CD4 = 1; - D_801D1CD8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018D7E0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018D7E0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D1CC8; - -void func_80158BB0(void *arg0) { - if (D_801D1CC8 == 0) { - D_801D1CC8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D1CD4; -extern s32 D_8018D7B4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D1CD4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D7B4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D1CD8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D1CD8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D1CC8; -extern s32 D_801D1CD0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D1CC8 == 4) { - D_801D1CC8 = 5; - } - if (D_801D1CD0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018D81C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018D81C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_801594E8); - - -extern void (*D_8018DA30[])(void); - -void func_80159698(void *a0) { - D_8018DA30[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D850)); - func_80028620(1, &(*(u8 *)&D_8018D850) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D850) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018DAD4[])(void); - -void func_80159968(void *a0) { - D_8018DAD4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018DC28[])(void); - -void func_80159B70(void *a0) { - D_8018DC28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018DA44; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DA44); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018DC30[])(void); - -void func_8015A264(void *a0) { - D_8018DC30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018DA54; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DA54); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018DAE0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018DA64; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DA64); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018DAE0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DA74 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018DA74; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018DA74); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018DC38[])(void); - -void func_8015AD3C(void *a0) { - D_8018DC38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8015444C.c b/src/ov_SC02_028/ov_SC02_028_jr_8015444C.c new file mode 100644 index 000000000..ef8e1f388 --- /dev/null +++ b/src/ov_SC02_028/ov_SC02_028_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D97C; +extern u8 D_8018D8EC; +extern u8 D_8018D8C8; +extern u8 D_8018D8A4; +extern u8 D_8018D958; +extern u8 D_8018D934; +extern u8 D_8018D910; +extern u8 D_8018D880; +extern void func_80145934(void); +extern u8 D_8018DA0C; +extern u8 D_8018D9E8; +extern u8 D_8018D9C4; +extern u8 D_8018D9A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CE04[]; +extern unsigned char D_8018CE34[]; +extern unsigned char D_8018CE84[]; +extern unsigned char D_8018CEB4[]; +extern unsigned char D_8018CEE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CF34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CFFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D084[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D08C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1C88; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1C8C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D0BC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D164[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D188[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D178; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D1A8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D1B8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D1D0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D1C0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D1E4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D200[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D1F0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D214[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D228[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D23C; +extern void (*D_8018D264[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D244; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D270[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D270[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D2B0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D2B0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D2B4[])(void); + +void func_80155580(void *a0) { + D_8018D2B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018D4A8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018D4A8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D718 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D718[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018D718[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018D728[])(void); + +void func_80157544(void *a0) { + D_8018D728[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D1CC0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D1CC0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D1CC0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018D750[])(void); +extern int D_801D1CC0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018D750[*(unsigned short *)((char *)param_1 + 2)](); + D_801D1CC0 = D_801D1CC0 - 1; + if (D_801D1CC0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D730; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D730); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018D740; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D740); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018D790[])(void); + +void func_80157DC4(void *a0) { + D_8018D790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018D798[])(void); + +void func_80157FC4(void *a0) { + D_8018D798[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018D764; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018D764); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018D7A4[])(void); + +void func_8015824C(void *a0) { + D_8018D7A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018D774; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D774); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D1CC8; +extern s32 D_801D1CD4; +extern s32 D_801D1CD8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D1CC8 = 0; + D_801D1CD4 = 1; + D_801D1CD8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D1CC8; +extern s32 D_801D1CD4; +extern s32 D_801D1CD8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D1CC8 = 0; + D_801D1CD4 = 1; + D_801D1CD8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018D7E0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018D7E0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D1CC8; + +void func_80158BB0(void *arg0) { + if (D_801D1CC8 == 0) { + D_801D1CC8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D1CD4; +extern s32 D_8018D7B4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D1CD4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D7B4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D1CD8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D1CD8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1CC8; +extern s32 D_801D1CD0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D1CC8 == 4) { + D_801D1CC8 = 5; + } + if (D_801D1CD0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018D81C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018D81C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_801594E8); + + +extern void (*D_8018DA30[])(void); + +void func_80159698(void *a0) { + D_8018DA30[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D850)); + func_80028620(1, &(*(u8 *)&D_8018D850) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D850) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018DAD4[])(void); + +void func_80159968(void *a0) { + D_8018DAD4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018DC28[])(void); + +void func_80159B70(void *a0) { + D_8018DC28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018DA44; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DA44); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018DC30[])(void); + +void func_8015A264(void *a0) { + D_8018DC30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018DA54; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DA54); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_028/ov_SC02_028_jr_8015A3C8.c b/src/ov_SC02_028/ov_SC02_028_jr_8015A3C8.c new file mode 100644 index 000000000..9e38293bc --- /dev/null +++ b/src/ov_SC02_028/ov_SC02_028_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D97C; +extern u8 D_8018D8EC; +extern u8 D_8018D8C8; +extern u8 D_8018D8A4; +extern u8 D_8018D958; +extern u8 D_8018D934; +extern u8 D_8018D910; +extern u8 D_8018D880; +extern void func_80145934(void); +extern u8 D_8018DA0C; +extern u8 D_8018D9E8; +extern u8 D_8018D9C4; +extern u8 D_8018D9A0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CE04[]; +extern unsigned char D_8018CE34[]; +extern unsigned char D_8018CE84[]; +extern unsigned char D_8018CEB4[]; +extern unsigned char D_8018CEE4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018CF34[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018CFFC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D084[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D08C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1C88; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1C8C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D0BC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D164[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D188[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D178; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D1A8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D1B8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D1D0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D1C0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D1E4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D200[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D1F0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D214[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D228[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D23C; +extern void (*D_8018D264[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D244; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D2B0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D2B4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D718[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D728[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1CC0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D750[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D730; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D740; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D790[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D798[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D764; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D7A4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D774; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1CC8; +extern s32 D_801D1CD4; +extern s32 D_801D1CD8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D7E0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D7B4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1CD0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DA30[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D850[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DAD4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DC28[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DA44; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DC30[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DA54; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DAE0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DA64; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DA64); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DAE0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DA74 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DA74; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018DA74); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018DC38[])(void); + +void func_8015AD3C(void *a0) { + D_8018DC38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_031/ov_SC02_031_after.c b/src/ov_SC02_031/ov_SC02_031_after.c index 900643701..b408a491f 100644 --- a/src/ov_SC02_031/ov_SC02_031_after.c +++ b/src/ov_SC02_031/ov_SC02_031_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_031/nonmatchings/ov_SC02_031_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186A9C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186A9C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186ADC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186ADC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186AE0[])(void); - -void func_80155580(void *a0) { - D_80186AE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186CD4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186CD4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186F44 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186F44[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186F44[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186F54[])(void); - -void func_80157544(void *a0) { - D_80186F54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B6438; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B6438 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B6438 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186F7C[])(void); -extern int D_801B6438; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186F7C[*(unsigned short *)((char *)param_1 + 2)](); - D_801B6438 = D_801B6438 - 1; - if (D_801B6438 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186F5C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186F5C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186F6C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186F6C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186FBC[])(void); - -void func_80157DC4(void *a0) { - D_80186FBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186FC4[])(void); - -void func_80157FC4(void *a0) { - D_80186FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186F90; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186F90); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186FD0[])(void); - -void func_8015824C(void *a0) { - D_80186FD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186FA0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186FA0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B6440; -extern s32 D_801B644C; -extern s32 D_801B6450; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B6440 = 0; - D_801B644C = 1; - D_801B6450 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B6440; -extern s32 D_801B644C; -extern s32 D_801B6450; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B6440 = 0; - D_801B644C = 1; - D_801B6450 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018700C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018700C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B6440; - -void func_80158BB0(void *arg0) { - if (D_801B6440 == 0) { - D_801B6440 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B644C; -extern s32 D_80186FE0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B644C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186FE0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B6450; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B6450 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B6440; -extern s32 D_801B6448; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B6440 == 4) { - D_801B6440 = 5; - } - if (D_801B6448 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187048[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187048; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_801594E8); - - -extern void (*D_8018725C[])(void); - -void func_80159698(void *a0) { - D_8018725C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018707C)); - func_80028620(1, &(*(u8 *)&D_8018707C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018707C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187300[])(void); - -void func_80159968(void *a0) { - D_80187300[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187454[])(void); - -void func_80159B70(void *a0) { - D_80187454[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187270; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187270); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018745C[])(void); - -void func_8015A264(void *a0) { - D_8018745C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187280; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187280); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018730C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80187290; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018730C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187290); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018730C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801872A0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801872A0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801872A0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187464[])(void); - -void func_8015AD3C(void *a0) { - D_80187464[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8015444C.c b/src/ov_SC02_031/ov_SC02_031_jr_8015444C.c new file mode 100644 index 000000000..08814a630 --- /dev/null +++ b/src/ov_SC02_031/ov_SC02_031_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871A8; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801870D0; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_8018713C; +extern u8 D_801870AC; +extern void func_80145934(void); +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186630[]; +extern unsigned char D_80186660[]; +extern unsigned char D_801866B0[]; +extern unsigned char D_801866E0[]; +extern unsigned char D_80186710[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186760[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186828[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868B0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868B8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B6400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B6404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801868E8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186990[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869B4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869A4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869C8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869D4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801869E4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801869FC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801869EC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A10[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A2C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A1C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A40[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A54[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A68; +extern void (*D_80186A90[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A70; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186A9C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186A9C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186ADC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186ADC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186AE0[])(void); + +void func_80155580(void *a0) { + D_80186AE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186CD4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186CD4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186F44 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F44[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186F44[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186F54[])(void); + +void func_80157544(void *a0) { + D_80186F54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B6438; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B6438 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B6438 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186F7C[])(void); +extern int D_801B6438; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186F7C[*(unsigned short *)((char *)param_1 + 2)](); + D_801B6438 = D_801B6438 - 1; + if (D_801B6438 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F5C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186F5C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186F6C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186F6C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186FBC[])(void); + +void func_80157DC4(void *a0) { + D_80186FBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186FC4[])(void); + +void func_80157FC4(void *a0) { + D_80186FC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186F90; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186F90); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186FD0[])(void); + +void func_8015824C(void *a0) { + D_80186FD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186FA0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186FA0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B6440; +extern s32 D_801B644C; +extern s32 D_801B6450; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B6440 = 0; + D_801B644C = 1; + D_801B6450 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B6440; +extern s32 D_801B644C; +extern s32 D_801B6450; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B6440 = 0; + D_801B644C = 1; + D_801B6450 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018700C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018700C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B6440; + +void func_80158BB0(void *arg0) { + if (D_801B6440 == 0) { + D_801B6440 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B644C; +extern s32 D_80186FE0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B644C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186FE0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B6450; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B6450 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B6440; +extern s32 D_801B6448; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B6440 == 4) { + D_801B6440 = 5; + } + if (D_801B6448 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187048[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187048; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_801594E8); + + +extern void (*D_8018725C[])(void); + +void func_80159698(void *a0) { + D_8018725C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018707C)); + func_80028620(1, &(*(u8 *)&D_8018707C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018707C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187300[])(void); + +void func_80159968(void *a0) { + D_80187300[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187454[])(void); + +void func_80159B70(void *a0) { + D_80187454[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187270; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187270); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018745C[])(void); + +void func_8015A264(void *a0) { + D_8018745C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187280; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187280); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_031/ov_SC02_031_jr_8015A3C8.c b/src/ov_SC02_031/ov_SC02_031_jr_8015A3C8.c new file mode 100644 index 000000000..a6377fc78 --- /dev/null +++ b/src/ov_SC02_031/ov_SC02_031_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871A8; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801870D0; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_8018713C; +extern u8 D_801870AC; +extern void func_80145934(void); +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186630[]; +extern unsigned char D_80186660[]; +extern unsigned char D_801866B0[]; +extern unsigned char D_801866E0[]; +extern unsigned char D_80186710[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186760[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186828[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868B0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868B8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B6400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B6404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801868E8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186990[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869B4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869A4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869C8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869D4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801869E4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801869FC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801869EC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A10[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A2C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A1C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A40[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A54[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A68; +extern void (*D_80186A90[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A70; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186ADC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186AE0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F44[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186F54[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B6438; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186F7C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F5C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186F6C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186FBC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186FC4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186F90; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186FD0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186FA0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B6440; +extern s32 D_801B644C; +extern s32 D_801B6450; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018700C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186FE0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B6448; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018725C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018707C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187300[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187454[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187270; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018745C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187280; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018730C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187290; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018730C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187290); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018730C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801872A0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801872A0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801872A0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187464[])(void); + +void func_8015AD3C(void *a0) { + D_80187464[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_035/ov_SC02_035_after.c b/src/ov_SC02_035/ov_SC02_035_after.c index 840dec78f..a19702f1e 100644 --- a/src/ov_SC02_035/ov_SC02_035_after.c +++ b/src/ov_SC02_035/ov_SC02_035_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_035/nonmatchings/ov_SC02_035_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801862FC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801862FC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018633C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018633C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186340[])(void); - -void func_80155580(void *a0) { - D_80186340[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186534[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186534[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801867A4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801867A4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801867A4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801867B4[])(void); - -void func_80157544(void *a0) { - D_801867B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801BD768; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801BD768 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801BD768 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801867DC[])(void); -extern int D_801BD768; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801867DC[*(unsigned short *)((char *)param_1 + 2)](); - D_801BD768 = D_801BD768 - 1; - if (D_801BD768 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801867BC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801867BC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801867CC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801867CC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018681C[])(void); - -void func_80157DC4(void *a0) { - D_8018681C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186824[])(void); - -void func_80157FC4(void *a0) { - D_80186824[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801867F0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801867F0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186830[])(void); - -void func_8015824C(void *a0) { - D_80186830[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186800; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186800); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801BD770; -extern s32 D_801BD77C; -extern s32 D_801BD780; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801BD770 = 0; - D_801BD77C = 1; - D_801BD780 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801BD770; -extern s32 D_801BD77C; -extern s32 D_801BD780; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801BD770 = 0; - D_801BD77C = 1; - D_801BD780 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018686C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018686C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801BD770; - -void func_80158BB0(void *arg0) { - if (D_801BD770 == 0) { - D_801BD770 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801BD77C; -extern s32 D_80186840[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801BD77C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186840[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801BD780; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801BD780 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801BD770; -extern s32 D_801BD778; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801BD770 == 4) { - D_801BD770 = 5; - } - if (D_801BD778 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801868A8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801868A8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_801594E8); - - -extern void (*D_80186ABC[])(void); - -void func_80159698(void *a0) { - D_80186ABC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801868DC)); - func_80028620(1, &(*(u8 *)&D_801868DC) + 0x10); - func_80028620(2, &(*(u8 *)&D_801868DC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186B60[])(void); - -void func_80159968(void *a0) { - D_80186B60[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186CB4[])(void); - -void func_80159B70(void *a0) { - D_80186CB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186AD0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186AD0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80186CBC[])(void); - -void func_8015A264(void *a0) { - D_80186CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186AE0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186AE0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186B6C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_80186AF0[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186B6C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186AF0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186B6C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186B00 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186B00; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186B00); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186CC4[])(void); - -void func_8015AD3C(void *a0) { - D_80186CC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8015444C.c b/src/ov_SC02_035/ov_SC02_035_jr_8015444C.c new file mode 100644 index 000000000..46bec1959 --- /dev/null +++ b/src/ov_SC02_035/ov_SC02_035_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A08; +extern u8 D_80186978; +extern u8 D_80186954; +extern u8 D_80186930; +extern u8 D_801869E4; +extern u8 D_801869C0; +extern u8 D_8018699C; +extern u8 D_8018690C; +extern void func_80145934(void); +extern u8 D_80186A98; +extern u8 D_80186A74; +extern u8 D_80186A50; +extern u8 D_80186A2C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E90[]; +extern unsigned char D_80185EC0[]; +extern unsigned char D_80185F10[]; +extern unsigned char D_80185F40[]; +extern unsigned char D_80185F70[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185FC0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186088[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186110[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186118; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BD730; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BD734; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186148; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801861F0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186214[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186204; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186228[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186234[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186244[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018625C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018624C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186270[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018628C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018627C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801862A0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801862B4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801862C8; +extern void (*D_801862F0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801862D0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801862FC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801862FC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018633C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018633C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186340[])(void); + +void func_80155580(void *a0) { + D_80186340[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186534[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186534[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801867A4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801867A4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801867A4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801867B4[])(void); + +void func_80157544(void *a0) { + D_801867B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801BD768; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801BD768 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801BD768 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801867DC[])(void); +extern int D_801BD768; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801867DC[*(unsigned short *)((char *)param_1 + 2)](); + D_801BD768 = D_801BD768 - 1; + if (D_801BD768 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801867BC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801867BC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801867CC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801867CC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018681C[])(void); + +void func_80157DC4(void *a0) { + D_8018681C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186824[])(void); + +void func_80157FC4(void *a0) { + D_80186824[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801867F0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801867F0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186830[])(void); + +void func_8015824C(void *a0) { + D_80186830[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186800; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186800); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801BD770; +extern s32 D_801BD77C; +extern s32 D_801BD780; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801BD770 = 0; + D_801BD77C = 1; + D_801BD780 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801BD770; +extern s32 D_801BD77C; +extern s32 D_801BD780; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801BD770 = 0; + D_801BD77C = 1; + D_801BD780 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018686C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018686C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801BD770; + +void func_80158BB0(void *arg0) { + if (D_801BD770 == 0) { + D_801BD770 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801BD77C; +extern s32 D_80186840[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801BD77C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186840[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801BD780; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801BD780 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801BD770; +extern s32 D_801BD778; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801BD770 == 4) { + D_801BD770 = 5; + } + if (D_801BD778 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801868A8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801868A8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_801594E8); + + +extern void (*D_80186ABC[])(void); + +void func_80159698(void *a0) { + D_80186ABC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801868DC)); + func_80028620(1, &(*(u8 *)&D_801868DC) + 0x10); + func_80028620(2, &(*(u8 *)&D_801868DC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186B60[])(void); + +void func_80159968(void *a0) { + D_80186B60[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186CB4[])(void); + +void func_80159B70(void *a0) { + D_80186CB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186AD0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186AD0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80186CBC[])(void); + +void func_8015A264(void *a0) { + D_80186CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186AE0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186AE0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_035/ov_SC02_035_jr_8015A3C8.c b/src/ov_SC02_035/ov_SC02_035_jr_8015A3C8.c new file mode 100644 index 000000000..3aa866286 --- /dev/null +++ b/src/ov_SC02_035/ov_SC02_035_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A08; +extern u8 D_80186978; +extern u8 D_80186954; +extern u8 D_80186930; +extern u8 D_801869E4; +extern u8 D_801869C0; +extern u8 D_8018699C; +extern u8 D_8018690C; +extern void func_80145934(void); +extern u8 D_80186A98; +extern u8 D_80186A74; +extern u8 D_80186A50; +extern u8 D_80186A2C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185E90[]; +extern unsigned char D_80185EC0[]; +extern unsigned char D_80185F10[]; +extern unsigned char D_80185F40[]; +extern unsigned char D_80185F70[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185FC0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186088[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186110[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186118; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BD730; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BD734; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186148; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801861F0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186214[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186204; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186228[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186234[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186244[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018625C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018624C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186270[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018628C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018627C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801862A0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801862B4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801862C8; +extern void (*D_801862F0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801862D0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018633C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186340[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801867A4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801867B4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BD768; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801867DC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801867BC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801867CC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018681C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186824[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801867F0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186830[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186800; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BD770; +extern s32 D_801BD77C; +extern s32 D_801BD780; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018686C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186840[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BD778; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186ABC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801868DC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186B60[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186CB4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186AD0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186CBC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186AE0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186B6C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80186AF0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186B6C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186AF0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186B6C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186B00 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186B00; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186B00); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186CC4[])(void); + +void func_8015AD3C(void *a0) { + D_80186CC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_039/ov_SC02_039_after.c b/src/ov_SC02_039/ov_SC02_039_after.c index 57a263003..3890bd62e 100644 --- a/src/ov_SC02_039/ov_SC02_039_after.c +++ b/src/ov_SC02_039/ov_SC02_039_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_039/nonmatchings/ov_SC02_039_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180F28[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180F28[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180F68[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180F68[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180F6C[])(void); - -void func_80155580(void *a0) { - D_80180F6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181160[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181160[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801813D0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801813D0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801813D0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801813E0[])(void); - -void func_80157544(void *a0) { - D_801813E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019FB18; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019FB18 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019FB18 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181408[])(void); -extern int D_8019FB18; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181408[*(unsigned short *)((char *)param_1 + 2)](); - D_8019FB18 = D_8019FB18 - 1; - if (D_8019FB18 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801813E8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801813E8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801813F8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801813F8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181448[])(void); - -void func_80157DC4(void *a0) { - D_80181448[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181450[])(void); - -void func_80157FC4(void *a0) { - D_80181450[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018141C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018141C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018145C[])(void); - -void func_8015824C(void *a0) { - D_8018145C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018142C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018142C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019FB20; -extern s32 D_8019FB2C; -extern s32 D_8019FB30; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019FB20 = 0; - D_8019FB2C = 1; - D_8019FB30 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019FB20; -extern s32 D_8019FB2C; -extern s32 D_8019FB30; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019FB20 = 0; - D_8019FB2C = 1; - D_8019FB30 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181498[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181498[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019FB20; - -void func_80158BB0(void *arg0) { - if (D_8019FB20 == 0) { - D_8019FB20 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019FB2C; -extern s32 D_8018146C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019FB2C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018146C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019FB30; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019FB30 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019FB20; -extern s32 D_8019FB28; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019FB20 == 4) { - D_8019FB20 = 5; - } - if (D_8019FB28 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801814D4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801814D4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_801594E8); - - -extern void (*D_801816E8[])(void); - -void func_80159698(void *a0) { - D_801816E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181508)); - func_80028620(1, &(*(u8 *)&D_80181508) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181508) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018178C[])(void); - -void func_80159968(void *a0) { - D_8018178C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801818E0[])(void); - -void func_80159B70(void *a0) { - D_801818E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801816FC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801816FC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801818E8[])(void); - -void func_8015A264(void *a0) { - D_801818E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018170C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018170C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181798[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018171C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181798[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018171C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181798[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018172C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018172C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018172C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801818F0[])(void); - -void func_8015AD3C(void *a0) { - D_801818F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8015444C.c b/src/ov_SC02_039/ov_SC02_039_jr_8015444C.c new file mode 100644 index 000000000..189c0ce53 --- /dev/null +++ b/src/ov_SC02_039/ov_SC02_039_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181634; +extern u8 D_801815A4; +extern u8 D_80181580; +extern u8 D_8018155C; +extern u8 D_80181610; +extern u8 D_801815EC; +extern u8 D_801815C8; +extern u8 D_80181538; +extern void func_80145934(void); +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181658; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180ABC[]; +extern unsigned char D_80180AEC[]; +extern unsigned char D_80180B3C[]; +extern unsigned char D_80180B6C[]; +extern unsigned char D_80180B9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180BEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180CB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180D3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180D44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FAE0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FAE4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180D74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180E1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180E40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180E30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180E54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180E60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180E70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180E88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180E78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180E9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180EB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180EA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180ECC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180EE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180EF4; +extern void (*D_80180F1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180EFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180F28[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180F28[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180F68[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180F68[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180F6C[])(void); + +void func_80155580(void *a0) { + D_80180F6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181160[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181160[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801813D0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801813D0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801813D0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801813E0[])(void); + +void func_80157544(void *a0) { + D_801813E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019FB18; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019FB18 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019FB18 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181408[])(void); +extern int D_8019FB18; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181408[*(unsigned short *)((char *)param_1 + 2)](); + D_8019FB18 = D_8019FB18 - 1; + if (D_8019FB18 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801813E8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801813E8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801813F8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801813F8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181448[])(void); + +void func_80157DC4(void *a0) { + D_80181448[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181450[])(void); + +void func_80157FC4(void *a0) { + D_80181450[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018141C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018141C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018145C[])(void); + +void func_8015824C(void *a0) { + D_8018145C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018142C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018142C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019FB20; +extern s32 D_8019FB2C; +extern s32 D_8019FB30; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019FB20 = 0; + D_8019FB2C = 1; + D_8019FB30 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019FB20; +extern s32 D_8019FB2C; +extern s32 D_8019FB30; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019FB20 = 0; + D_8019FB2C = 1; + D_8019FB30 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181498[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181498[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019FB20; + +void func_80158BB0(void *arg0) { + if (D_8019FB20 == 0) { + D_8019FB20 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019FB2C; +extern s32 D_8018146C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019FB2C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018146C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019FB30; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019FB30 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FB20; +extern s32 D_8019FB28; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019FB20 == 4) { + D_8019FB20 = 5; + } + if (D_8019FB28 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801814D4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801814D4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_801594E8); + + +extern void (*D_801816E8[])(void); + +void func_80159698(void *a0) { + D_801816E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181508)); + func_80028620(1, &(*(u8 *)&D_80181508) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181508) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018178C[])(void); + +void func_80159968(void *a0) { + D_8018178C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801818E0[])(void); + +void func_80159B70(void *a0) { + D_801818E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801816FC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801816FC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801818E8[])(void); + +void func_8015A264(void *a0) { + D_801818E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018170C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018170C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_039/ov_SC02_039_jr_8015A3C8.c b/src/ov_SC02_039/ov_SC02_039_jr_8015A3C8.c new file mode 100644 index 000000000..c416e3a35 --- /dev/null +++ b/src/ov_SC02_039/ov_SC02_039_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181634; +extern u8 D_801815A4; +extern u8 D_80181580; +extern u8 D_8018155C; +extern u8 D_80181610; +extern u8 D_801815EC; +extern u8 D_801815C8; +extern u8 D_80181538; +extern void func_80145934(void); +extern u8 D_801816C4; +extern u8 D_801816A0; +extern u8 D_8018167C; +extern u8 D_80181658; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180ABC[]; +extern unsigned char D_80180AEC[]; +extern unsigned char D_80180B3C[]; +extern unsigned char D_80180B6C[]; +extern unsigned char D_80180B9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180BEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180CB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180D3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180D44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FAE0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FAE4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180D74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180E1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180E40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180E30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180E54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180E60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180E70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180E88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180E78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180E9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180EB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180EA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180ECC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180EE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180EF4; +extern void (*D_80180F1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180EFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180F68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180F6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801813D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801813E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019FB18; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181408[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801813E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801813F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181448[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181450[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018141C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018145C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018142C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019FB20; +extern s32 D_8019FB2C; +extern s32 D_8019FB30; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181498[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018146C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FB28; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801816E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181508[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018178C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801818E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801816FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801818E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018170C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181798[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018171C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181798[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018171C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181798[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018172C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018172C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018172C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801818F0[])(void); + +void func_8015AD3C(void *a0) { + D_801818F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC02_041/ov_SC02_041_after.c b/src/ov_SC02_041/ov_SC02_041_after.c index f85a35c5f..a41eb6213 100644 --- a/src/ov_SC02_041/ov_SC02_041_after.c +++ b/src/ov_SC02_041/ov_SC02_041_after.c @@ -2616,1415 +2616,3 @@ 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_SC02_041/nonmatchings/ov_SC02_041_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", 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) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186BF8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186BF8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186C38[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186C38[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186C3C[])(void); - -void func_80155580(void *a0) { - D_80186C3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186E30[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186E30[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801870A0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801870A0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801870A0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801870B0[])(void); - -void func_80157544(void *a0) { - D_801870B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B7E90; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B7E90 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B7E90 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801870D8[])(void); -extern int D_801B7E90; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801870D8[*(unsigned short *)((char *)param_1 + 2)](); - D_801B7E90 = D_801B7E90 - 1; - if (D_801B7E90 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801870B8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801870B8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801870C8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801870C8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187118[])(void); - -void func_80157DC4(void *a0) { - D_80187118[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187120[])(void); - -void func_80157FC4(void *a0) { - D_80187120[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801870EC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801870EC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018712C[])(void); - -void func_8015824C(void *a0) { - D_8018712C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801870FC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801870FC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B7E98; -extern s32 D_801B7EA4; -extern s32 D_801B7EA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B7E98 = 0; - D_801B7EA4 = 1; - D_801B7EA8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B7E98; -extern s32 D_801B7EA4; -extern s32 D_801B7EA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B7E98 = 0; - D_801B7EA4 = 1; - D_801B7EA8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187168[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187168[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B7E98; - -void func_80158BB0(void *arg0) { - if (D_801B7E98 == 0) { - D_801B7E98 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B7EA4; -extern s32 D_8018713C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B7EA4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018713C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B7EA8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B7EA8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B7E98; -extern s32 D_801B7EA0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B7E98 == 4) { - D_801B7E98 = 5; - } - if (D_801B7EA0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801871A4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801871A4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_801594E8); - - -extern void (*D_801873B8[])(void); - -void func_80159698(void *a0) { - D_801873B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801871D8)); - func_80028620(1, &(*(u8 *)&D_801871D8) + 0x10); - func_80028620(2, &(*(u8 *)&D_801871D8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018745C[])(void); - -void func_80159968(void *a0) { - D_8018745C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801875B0[])(void); - -void func_80159B70(void *a0) { - D_801875B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801873CC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801873CC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801875B8[])(void); - -void func_8015A264(void *a0) { - D_801875B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801873DC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801873DC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187468[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801873EC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187468[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801873EC); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187468[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801873FC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801873FC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801873FC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801875C0[])(void); - -void func_8015AD3C(void *a0) { - D_801875C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8015444C.c b/src/ov_SC02_041/ov_SC02_041_jr_8015444C.c new file mode 100644 index 000000000..cba84c983 --- /dev/null +++ b/src/ov_SC02_041/ov_SC02_041_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187304; +extern u8 D_80187274; +extern u8 D_80187250; +extern u8 D_8018722C; +extern u8 D_801872E0; +extern u8 D_801872BC; +extern u8 D_80187298; +extern u8 D_80187208; +extern void func_80145934(void); +extern u8 D_80187394; +extern u8 D_80187370; +extern u8 D_8018734C; +extern u8 D_80187328; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018678C[]; +extern unsigned char D_801867BC[]; +extern unsigned char D_8018680C[]; +extern unsigned char D_8018683C[]; +extern unsigned char D_8018686C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801868BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186984[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186A0C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186A14; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B7E58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B7E5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186A44; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186AEC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186B10[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186B00; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186B24[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186B30[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186B40[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186B58[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186B48; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186B6C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186B88[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186B78; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186B9C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186BB0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186BC4; +extern void (*D_80186BEC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186BCC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186BF8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186BF8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186C38[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186C38[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186C3C[])(void); + +void func_80155580(void *a0) { + D_80186C3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186E30[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186E30[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801870A0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801870A0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801870A0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801870B0[])(void); + +void func_80157544(void *a0) { + D_801870B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B7E90; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B7E90 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B7E90 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801870D8[])(void); +extern int D_801B7E90; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801870D8[*(unsigned short *)((char *)param_1 + 2)](); + D_801B7E90 = D_801B7E90 - 1; + if (D_801B7E90 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801870B8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801870B8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801870C8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801870C8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187118[])(void); + +void func_80157DC4(void *a0) { + D_80187118[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187120[])(void); + +void func_80157FC4(void *a0) { + D_80187120[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801870EC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801870EC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018712C[])(void); + +void func_8015824C(void *a0) { + D_8018712C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801870FC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801870FC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B7E98; +extern s32 D_801B7EA4; +extern s32 D_801B7EA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B7E98 = 0; + D_801B7EA4 = 1; + D_801B7EA8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B7E98; +extern s32 D_801B7EA4; +extern s32 D_801B7EA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B7E98 = 0; + D_801B7EA4 = 1; + D_801B7EA8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187168[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187168[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B7E98; + +void func_80158BB0(void *arg0) { + if (D_801B7E98 == 0) { + D_801B7E98 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B7EA4; +extern s32 D_8018713C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B7EA4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018713C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B7EA8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B7EA8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B7E98; +extern s32 D_801B7EA0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B7E98 == 4) { + D_801B7E98 = 5; + } + if (D_801B7EA0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801871A4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801871A4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_801594E8); + + +extern void (*D_801873B8[])(void); + +void func_80159698(void *a0) { + D_801873B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801871D8)); + func_80028620(1, &(*(u8 *)&D_801871D8) + 0x10); + func_80028620(2, &(*(u8 *)&D_801871D8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018745C[])(void); + +void func_80159968(void *a0) { + D_8018745C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801875B0[])(void); + +void func_80159B70(void *a0) { + D_801875B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801873CC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801873CC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801875B8[])(void); + +void func_8015A264(void *a0) { + D_801875B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801873DC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801873DC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC02_041/ov_SC02_041_jr_8015A3C8.c b/src/ov_SC02_041/ov_SC02_041_jr_8015A3C8.c new file mode 100644 index 000000000..8b9956ddb --- /dev/null +++ b/src/ov_SC02_041/ov_SC02_041_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187304; +extern u8 D_80187274; +extern u8 D_80187250; +extern u8 D_8018722C; +extern u8 D_801872E0; +extern u8 D_801872BC; +extern u8 D_80187298; +extern u8 D_80187208; +extern void func_80145934(void); +extern u8 D_80187394; +extern u8 D_80187370; +extern u8 D_8018734C; +extern u8 D_80187328; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018678C[]; +extern unsigned char D_801867BC[]; +extern unsigned char D_8018680C[]; +extern unsigned char D_8018683C[]; +extern unsigned char D_8018686C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801868BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186984[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186A0C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186A14; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B7E58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B7E5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186A44; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186AEC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186B10[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186B00; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186B24[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186B30[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186B40[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186B58[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186B48; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186B6C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186B88[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186B78; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186B9C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186BB0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186BC4; +extern void (*D_80186BEC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186BCC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186C38[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186C3C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801870A0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801870B0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B7E90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801870D8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801870B8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801870C8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187118[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187120[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801870EC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018712C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801870FC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B7E98; +extern s32 D_801B7EA4; +extern s32 D_801B7EA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187168[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018713C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B7EA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801873B8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801871D8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018745C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801875B0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801873CC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801875B8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801873DC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187468[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801873EC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187468[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801873EC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187468[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801873FC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801873FC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801873FC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801875C0[])(void); + +void func_8015AD3C(void *a0) { + D_801875C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_001/ov_SC03_001_after.c b/src/ov_SC03_001/ov_SC03_001_after.c index 80f2a734c..8c870aa10 100644 --- a/src/ov_SC03_001/ov_SC03_001_after.c +++ b/src/ov_SC03_001/ov_SC03_001_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_001/nonmatchings/ov_SC03_001_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018F338[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018F338[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018F378[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018F378[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018F37C[])(void); - -void func_80155580(void *a0) { - D_8018F37C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018F570[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018F570[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F7E0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F7E0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018F7E0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018F7F0[])(void); - -void func_80157544(void *a0) { - D_8018F7F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801ED510; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801ED510 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801ED510 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018F818[])(void); -extern int D_801ED510; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018F818[*(unsigned short *)((char *)param_1 + 2)](); - D_801ED510 = D_801ED510 - 1; - if (D_801ED510 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F7F8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F7F8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018F808; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F808); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018F858[])(void); - -void func_80157DC4(void *a0) { - D_8018F858[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018F860[])(void); - -void func_80157FC4(void *a0) { - D_8018F860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018F82C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018F82C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018F86C[])(void); - -void func_8015824C(void *a0) { - D_8018F86C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018F83C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F83C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801ED518; -extern s32 D_801ED524; -extern s32 D_801ED528; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801ED518 = 0; - D_801ED524 = 1; - D_801ED528 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801ED518; -extern s32 D_801ED524; -extern s32 D_801ED528; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801ED518 = 0; - D_801ED524 = 1; - D_801ED528 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018F8A8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018F8A8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801ED518; - -void func_80158BB0(void *arg0) { - if (D_801ED518 == 0) { - D_801ED518 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801ED524; -extern s32 D_8018F87C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801ED524; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F87C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801ED528; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801ED528 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801ED518; -extern s32 D_801ED520; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801ED518 == 4) { - D_801ED518 = 5; - } - if (D_801ED520 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018F8E4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018F8E4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_801594E8); - - -extern void (*D_8018FAF8[])(void); - -void func_80159698(void *a0) { - D_8018FAF8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018F918)); - func_80028620(1, &(*(u8 *)&D_8018F918) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018F918) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018FB9C[])(void); - -void func_80159968(void *a0) { - D_8018FB9C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018FCF0[])(void); - -void func_80159B70(void *a0) { - D_8018FCF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018FB0C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018FB0C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018FCF8[])(void); - -void func_8015A264(void *a0) { - D_8018FCF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018FB1C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018FB1C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018FBA8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018FB2C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018FB2C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018FBA8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018FB3C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018FB3C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018FB3C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018FD00[])(void); - -void func_8015AD3C(void *a0) { - D_8018FD00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8015444C.c b/src/ov_SC03_001/ov_SC03_001_jr_8015444C.c new file mode 100644 index 000000000..fbf4d5f56 --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018FA44; +extern u8 D_8018F9B4; +extern u8 D_8018F990; +extern u8 D_8018F96C; +extern u8 D_8018FA20; +extern u8 D_8018F9FC; +extern u8 D_8018F9D8; +extern u8 D_8018F948; +extern void func_80145934(void); +extern u8 D_8018FAD4; +extern u8 D_8018FAB0; +extern u8 D_8018FA8C; +extern u8 D_8018FA68; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EECC[]; +extern unsigned char D_8018EEFC[]; +extern unsigned char D_8018EF4C[]; +extern unsigned char D_8018EF7C[]; +extern unsigned char D_8018EFAC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EFFC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018F0C4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018F14C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018F154; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ED4D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ED4DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018F184; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F22C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F250[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F240; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F264[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F270[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F280[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F298[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F288; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F2AC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F2C8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F2B8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F2DC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F2F0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F304; +extern void (*D_8018F32C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F30C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018F338[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018F338[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018F378[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018F378[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018F37C[])(void); + +void func_80155580(void *a0) { + D_8018F37C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018F570[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018F570[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F7E0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F7E0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018F7E0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018F7F0[])(void); + +void func_80157544(void *a0) { + D_8018F7F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801ED510; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801ED510 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801ED510 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018F818[])(void); +extern int D_801ED510; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018F818[*(unsigned short *)((char *)param_1 + 2)](); + D_801ED510 = D_801ED510 - 1; + if (D_801ED510 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F7F8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F7F8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018F808; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F808); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018F858[])(void); + +void func_80157DC4(void *a0) { + D_8018F858[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018F860[])(void); + +void func_80157FC4(void *a0) { + D_8018F860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018F82C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018F82C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018F86C[])(void); + +void func_8015824C(void *a0) { + D_8018F86C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018F83C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F83C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801ED518; +extern s32 D_801ED524; +extern s32 D_801ED528; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801ED518 = 0; + D_801ED524 = 1; + D_801ED528 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801ED518; +extern s32 D_801ED524; +extern s32 D_801ED528; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801ED518 = 0; + D_801ED524 = 1; + D_801ED528 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018F8A8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018F8A8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801ED518; + +void func_80158BB0(void *arg0) { + if (D_801ED518 == 0) { + D_801ED518 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801ED524; +extern s32 D_8018F87C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801ED524; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F87C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801ED528; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801ED528 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801ED518; +extern s32 D_801ED520; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801ED518 == 4) { + D_801ED518 = 5; + } + if (D_801ED520 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018F8E4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018F8E4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_801594E8); + + +extern void (*D_8018FAF8[])(void); + +void func_80159698(void *a0) { + D_8018FAF8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018F918)); + func_80028620(1, &(*(u8 *)&D_8018F918) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018F918) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018FB9C[])(void); + +void func_80159968(void *a0) { + D_8018FB9C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018FCF0[])(void); + +void func_80159B70(void *a0) { + D_8018FCF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018FB0C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018FB0C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018FCF8[])(void); + +void func_8015A264(void *a0) { + D_8018FCF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018FB1C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018FB1C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_001/ov_SC03_001_jr_8015A3C8.c b/src/ov_SC03_001/ov_SC03_001_jr_8015A3C8.c new file mode 100644 index 000000000..1ff66c9de --- /dev/null +++ b/src/ov_SC03_001/ov_SC03_001_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018FA44; +extern u8 D_8018F9B4; +extern u8 D_8018F990; +extern u8 D_8018F96C; +extern u8 D_8018FA20; +extern u8 D_8018F9FC; +extern u8 D_8018F9D8; +extern u8 D_8018F948; +extern void func_80145934(void); +extern u8 D_8018FAD4; +extern u8 D_8018FAB0; +extern u8 D_8018FA8C; +extern u8 D_8018FA68; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EECC[]; +extern unsigned char D_8018EEFC[]; +extern unsigned char D_8018EF4C[]; +extern unsigned char D_8018EF7C[]; +extern unsigned char D_8018EFAC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EFFC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018F0C4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018F14C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018F154; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ED4D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ED4DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018F184; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F22C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F250[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F240; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F264[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F270[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F280[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F298[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F288; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F2AC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F2C8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F2B8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F2DC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F2F0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F304; +extern void (*D_8018F32C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F30C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F378[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F37C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F7E0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F7F0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ED510; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F818[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F7F8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F808; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F858[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F860[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F82C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F86C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F83C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ED518; +extern s32 D_801ED524; +extern s32 D_801ED528; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F8A8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F87C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ED520; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018FAF8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F918[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018FB9C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018FCF0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018FB0C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FCF8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018FB1C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018FBA8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018FB2C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018FB2C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018FBA8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018FB3C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018FB3C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018FB3C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018FD00[])(void); + +void func_8015AD3C(void *a0) { + D_8018FD00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_002/ov_SC03_002_after.c b/src/ov_SC03_002/ov_SC03_002_after.c index 4b3bc27da..cb9134eea 100644 --- a/src/ov_SC03_002/ov_SC03_002_after.c +++ b/src/ov_SC03_002/ov_SC03_002_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_002/nonmatchings/ov_SC03_002_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187328[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187328[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187368[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187368[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018736C[])(void); - -void func_80155580(void *a0) { - D_8018736C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187560[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187560[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801877D0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801877D0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801877D0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801877E0[])(void); - -void func_80157544(void *a0) { - D_801877E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CA590; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CA590 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CA590 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187808[])(void); -extern int D_801CA590; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187808[*(unsigned short *)((char *)param_1 + 2)](); - D_801CA590 = D_801CA590 - 1; - if (D_801CA590 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801877E8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801877E8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801877F8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801877F8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187848[])(void); - -void func_80157DC4(void *a0) { - D_80187848[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187850[])(void); - -void func_80157FC4(void *a0) { - D_80187850[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018781C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018781C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018785C[])(void); - -void func_8015824C(void *a0) { - D_8018785C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018782C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018782C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CA598; -extern s32 D_801CA5A4; -extern s32 D_801CA5A8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CA598 = 0; - D_801CA5A4 = 1; - D_801CA5A8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CA598; -extern s32 D_801CA5A4; -extern s32 D_801CA5A8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CA598 = 0; - D_801CA5A4 = 1; - D_801CA5A8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187898[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187898[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CA598; - -void func_80158BB0(void *arg0) { - if (D_801CA598 == 0) { - D_801CA598 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CA5A4; -extern s32 D_8018786C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CA5A4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018786C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CA5A8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CA5A8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CA598; -extern s32 D_801CA5A0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CA598 == 4) { - D_801CA598 = 5; - } - if (D_801CA5A0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801878D4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801878D4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_801594E8); - - -extern void (*D_80187AE8[])(void); - -void func_80159698(void *a0) { - D_80187AE8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187908)); - func_80028620(1, &(*(u8 *)&D_80187908) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187908) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187B8C[])(void); - -void func_80159968(void *a0) { - D_80187B8C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187CE0[])(void); - -void func_80159B70(void *a0) { - D_80187CE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187AFC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187AFC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187CE8[])(void); - -void func_8015A264(void *a0) { - D_80187CE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187B0C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187B0C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187B98[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_80187B1C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187B98[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187B1C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187B98[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187B2C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80187B2C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80187B2C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187CF0[])(void); - -void func_8015AD3C(void *a0) { - D_80187CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8015444C.c b/src/ov_SC03_002/ov_SC03_002_jr_8015444C.c new file mode 100644 index 000000000..06fa15b68 --- /dev/null +++ b/src/ov_SC03_002/ov_SC03_002_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187A34; +extern u8 D_801879A4; +extern u8 D_80187980; +extern u8 D_8018795C; +extern u8 D_80187A10; +extern u8 D_801879EC; +extern u8 D_801879C8; +extern u8 D_80187938; +extern void func_80145934(void); +extern u8 D_80187AC4; +extern u8 D_80187AA0; +extern u8 D_80187A7C; +extern u8 D_80187A58; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186EBC[]; +extern unsigned char D_80186EEC[]; +extern unsigned char D_80186F3C[]; +extern unsigned char D_80186F6C[]; +extern unsigned char D_80186F9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186FEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801870B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018713C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187144; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CA558; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CA55C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187174; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018721C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187240[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187230; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187254[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187260[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187270[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187288[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187278; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018729C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801872B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801872A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801872CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801872E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801872F4; +extern void (*D_8018731C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801872FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187328[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187328[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187368[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187368[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018736C[])(void); + +void func_80155580(void *a0) { + D_8018736C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187560[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187560[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801877D0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801877D0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801877D0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801877E0[])(void); + +void func_80157544(void *a0) { + D_801877E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CA590; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CA590 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CA590 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187808[])(void); +extern int D_801CA590; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187808[*(unsigned short *)((char *)param_1 + 2)](); + D_801CA590 = D_801CA590 - 1; + if (D_801CA590 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801877E8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801877E8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801877F8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801877F8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187848[])(void); + +void func_80157DC4(void *a0) { + D_80187848[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187850[])(void); + +void func_80157FC4(void *a0) { + D_80187850[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018781C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018781C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018785C[])(void); + +void func_8015824C(void *a0) { + D_8018785C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018782C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018782C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CA598; +extern s32 D_801CA5A4; +extern s32 D_801CA5A8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CA598 = 0; + D_801CA5A4 = 1; + D_801CA5A8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CA598; +extern s32 D_801CA5A4; +extern s32 D_801CA5A8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CA598 = 0; + D_801CA5A4 = 1; + D_801CA5A8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187898[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187898[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CA598; + +void func_80158BB0(void *arg0) { + if (D_801CA598 == 0) { + D_801CA598 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CA5A4; +extern s32 D_8018786C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CA5A4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018786C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CA5A8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CA5A8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CA598; +extern s32 D_801CA5A0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CA598 == 4) { + D_801CA598 = 5; + } + if (D_801CA5A0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801878D4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801878D4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_801594E8); + + +extern void (*D_80187AE8[])(void); + +void func_80159698(void *a0) { + D_80187AE8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187908)); + func_80028620(1, &(*(u8 *)&D_80187908) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187908) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187B8C[])(void); + +void func_80159968(void *a0) { + D_80187B8C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187CE0[])(void); + +void func_80159B70(void *a0) { + D_80187CE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187AFC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187AFC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187CE8[])(void); + +void func_8015A264(void *a0) { + D_80187CE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187B0C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187B0C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8015A3C8.c b/src/ov_SC03_002/ov_SC03_002_jr_8015A3C8.c new file mode 100644 index 000000000..1bb03a270 --- /dev/null +++ b/src/ov_SC03_002/ov_SC03_002_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187A34; +extern u8 D_801879A4; +extern u8 D_80187980; +extern u8 D_8018795C; +extern u8 D_80187A10; +extern u8 D_801879EC; +extern u8 D_801879C8; +extern u8 D_80187938; +extern void func_80145934(void); +extern u8 D_80187AC4; +extern u8 D_80187AA0; +extern u8 D_80187A7C; +extern u8 D_80187A58; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186EBC[]; +extern unsigned char D_80186EEC[]; +extern unsigned char D_80186F3C[]; +extern unsigned char D_80186F6C[]; +extern unsigned char D_80186F9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186FEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801870B4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018713C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187144; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CA558; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CA55C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187174; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018721C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187240[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187230; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187254[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187260[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187270[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187288[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187278; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018729C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801872B8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801872A8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801872CC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801872E0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801872F4; +extern void (*D_8018731C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801872FC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187368[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018736C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801877D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801877E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CA590; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187808[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801877E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801877F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187848[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187850[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018781C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018785C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018782C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CA598; +extern s32 D_801CA5A4; +extern s32 D_801CA5A8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187898[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018786C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CA5A0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187AE8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187908[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187B8C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187CE0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187AFC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187CE8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187B0C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187B98[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80187B1C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187B98[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187B1C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187B98[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187B2C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187B2C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80187B2C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187CF0[])(void); + +void func_8015AD3C(void *a0) { + D_80187CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_003/ov_SC03_003_after.c b/src/ov_SC03_003/ov_SC03_003_after.c index 3ed087092..989117a53 100644 --- a/src/ov_SC03_003/ov_SC03_003_after.c +++ b/src/ov_SC03_003/ov_SC03_003_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_003/nonmatchings/ov_SC03_003_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801810F0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801810F0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181130[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181130[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181134[])(void); - -void func_80155580(void *a0) { - D_80181134[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181328[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181328[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181598 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80181598[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80181598[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801815A8[])(void); - -void func_80157544(void *a0) { - D_801815A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018E898; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018E898 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018E898 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801815D0[])(void); -extern int D_8018E898; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801815D0[*(unsigned short *)((char *)param_1 + 2)](); - D_8018E898 = D_8018E898 - 1; - if (D_8018E898 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801815B0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801815B0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801815C0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801815C0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181610[])(void); - -void func_80157DC4(void *a0) { - D_80181610[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181618[])(void); - -void func_80157FC4(void *a0) { - D_80181618[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801815E4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801815E4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80181624[])(void); - -void func_8015824C(void *a0) { - D_80181624[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801815F4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815F4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018E8A0; -extern s32 D_8018E8AC; -extern s32 D_8018E8B0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018E8A0 = 0; - D_8018E8AC = 1; - D_8018E8B0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018E8A0; -extern s32 D_8018E8AC; -extern s32 D_8018E8B0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018E8A0 = 0; - D_8018E8AC = 1; - D_8018E8B0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181660[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181660[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018E8A0; - -void func_80158BB0(void *arg0) { - if (D_8018E8A0 == 0) { - D_8018E8A0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018E8AC; -extern s32 D_80181634[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018E8AC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181634[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018E8B0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018E8B0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018E8A0; -extern s32 D_8018E8A8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018E8A0 == 4) { - D_8018E8A0 = 5; - } - if (D_8018E8A8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018169C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018169C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_801594E8); - - -extern void (*D_801818B0[])(void); - -void func_80159698(void *a0) { - D_801818B0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801816D0)); - func_80028620(1, &(*(u8 *)&D_801816D0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801816D0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181954[])(void); - -void func_80159968(void *a0) { - D_80181954[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181AA8[])(void); - -void func_80159B70(void *a0) { - D_80181AA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801818C4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801818C4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181AB0[])(void); - -void func_8015A264(void *a0) { - D_80181AB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801818D4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801818D4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181960[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801818E4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181960[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801818E4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181960[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818F4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801818F4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801818F4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181AB8[])(void); - -void func_8015AD3C(void *a0) { - D_80181AB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8015444C.c b/src/ov_SC03_003/ov_SC03_003_jr_8015444C.c new file mode 100644 index 000000000..023de9bc6 --- /dev/null +++ b/src/ov_SC03_003/ov_SC03_003_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817FC; +extern u8 D_8018176C; +extern u8 D_80181748; +extern u8 D_80181724; +extern u8 D_801817D8; +extern u8 D_801817B4; +extern u8 D_80181790; +extern u8 D_80181700; +extern void func_80145934(void); +extern u8 D_8018188C; +extern u8 D_80181868; +extern u8 D_80181844; +extern u8 D_80181820; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C84[]; +extern unsigned char D_80180CB4[]; +extern unsigned char D_80180D04[]; +extern unsigned char D_80180D34[]; +extern unsigned char D_80180D64[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180DB4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E7C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180F04[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180F0C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E860; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E864; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180F3C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180FE4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181008[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FF8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018101C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181028[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181038[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181050[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181040; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181064[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181080[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181070; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181094[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801810A8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801810BC; +extern void (*D_801810E4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801810C4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801810F0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801810F0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181130[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181130[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181134[])(void); + +void func_80155580(void *a0) { + D_80181134[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181328[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181328[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181598 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80181598[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80181598[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801815A8[])(void); + +void func_80157544(void *a0) { + D_801815A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018E898; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018E898 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018E898 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801815D0[])(void); +extern int D_8018E898; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801815D0[*(unsigned short *)((char *)param_1 + 2)](); + D_8018E898 = D_8018E898 - 1; + if (D_8018E898 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801815B0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801815B0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801815C0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801815C0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181610[])(void); + +void func_80157DC4(void *a0) { + D_80181610[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181618[])(void); + +void func_80157FC4(void *a0) { + D_80181618[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801815E4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801815E4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80181624[])(void); + +void func_8015824C(void *a0) { + D_80181624[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801815F4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815F4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018E8A0; +extern s32 D_8018E8AC; +extern s32 D_8018E8B0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018E8A0 = 0; + D_8018E8AC = 1; + D_8018E8B0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018E8A0; +extern s32 D_8018E8AC; +extern s32 D_8018E8B0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018E8A0 = 0; + D_8018E8AC = 1; + D_8018E8B0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181660[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181660[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018E8A0; + +void func_80158BB0(void *arg0) { + if (D_8018E8A0 == 0) { + D_8018E8A0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018E8AC; +extern s32 D_80181634[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018E8AC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181634[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018E8B0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018E8B0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E8A0; +extern s32 D_8018E8A8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018E8A0 == 4) { + D_8018E8A0 = 5; + } + if (D_8018E8A8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018169C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018169C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_801594E8); + + +extern void (*D_801818B0[])(void); + +void func_80159698(void *a0) { + D_801818B0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801816D0)); + func_80028620(1, &(*(u8 *)&D_801816D0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801816D0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181954[])(void); + +void func_80159968(void *a0) { + D_80181954[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181AA8[])(void); + +void func_80159B70(void *a0) { + D_80181AA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801818C4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801818C4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181AB0[])(void); + +void func_8015A264(void *a0) { + D_80181AB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801818D4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801818D4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8015A3C8.c b/src/ov_SC03_003/ov_SC03_003_jr_8015A3C8.c new file mode 100644 index 000000000..58d8071f4 --- /dev/null +++ b/src/ov_SC03_003/ov_SC03_003_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817FC; +extern u8 D_8018176C; +extern u8 D_80181748; +extern u8 D_80181724; +extern u8 D_801817D8; +extern u8 D_801817B4; +extern u8 D_80181790; +extern u8 D_80181700; +extern void func_80145934(void); +extern u8 D_8018188C; +extern u8 D_80181868; +extern u8 D_80181844; +extern u8 D_80181820; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C84[]; +extern unsigned char D_80180CB4[]; +extern unsigned char D_80180D04[]; +extern unsigned char D_80180D34[]; +extern unsigned char D_80180D64[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180DB4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E7C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180F04[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180F0C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E860; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E864; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180F3C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180FE4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181008[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FF8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018101C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181028[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181038[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181050[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181040; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181064[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181080[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181070; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181094[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801810A8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801810BC; +extern void (*D_801810E4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801810C4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181130[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181134[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181598[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801815A8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E898; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801815D0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801815B0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801815C0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181610[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181618[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801815E4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181624[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815F4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E8A0; +extern s32 D_8018E8AC; +extern s32 D_8018E8B0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181660[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181634[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E8A8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801818B0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801816D0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181954[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181AA8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801818C4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181AB0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801818D4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181960[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801818E4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181960[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801818E4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181960[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818F4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818F4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801818F4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181AB8[])(void); + +void func_8015AD3C(void *a0) { + D_80181AB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_006/ov_SC03_006_after.c b/src/ov_SC03_006/ov_SC03_006_after.c index 2826c1683..e2ed6538f 100644 --- a/src/ov_SC03_006/ov_SC03_006_after.c +++ b/src/ov_SC03_006/ov_SC03_006_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_006/nonmatchings/ov_SC03_006_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018E40C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018E40C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018E44C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018E44C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018E450[])(void); - -void func_80155580(void *a0) { - D_8018E450[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018E644[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018E644[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018E8B4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018E8B4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018E8B4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018E8C4[])(void); - -void func_80157544(void *a0) { - D_8018E8C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801F6210; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801F6210 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801F6210 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018E8EC[])(void); -extern int D_801F6210; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018E8EC[*(unsigned short *)((char *)param_1 + 2)](); - D_801F6210 = D_801F6210 - 1; - if (D_801F6210 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018E8CC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018E8CC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018E8DC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018E8DC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018E92C[])(void); - -void func_80157DC4(void *a0) { - D_8018E92C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018E934[])(void); - -void func_80157FC4(void *a0) { - D_8018E934[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018E900; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018E900); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018E940[])(void); - -void func_8015824C(void *a0) { - D_8018E940[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018E910; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018E910); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801F6218; -extern s32 D_801F6224; -extern s32 D_801F6228; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801F6218 = 0; - D_801F6224 = 1; - D_801F6228 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801F6218; -extern s32 D_801F6224; -extern s32 D_801F6228; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801F6218 = 0; - D_801F6224 = 1; - D_801F6228 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018E97C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018E97C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801F6218; - -void func_80158BB0(void *arg0) { - if (D_801F6218 == 0) { - D_801F6218 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801F6224; -extern s32 D_8018E950[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801F6224; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018E950[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801F6228; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801F6228 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801F6218; -extern s32 D_801F6220; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801F6218 == 4) { - D_801F6218 = 5; - } - if (D_801F6220 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018E9B8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018E9B8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_801594E8); - - -extern void (*D_8018EBCC[])(void); - -void func_80159698(void *a0) { - D_8018EBCC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018E9EC)); - func_80028620(1, &(*(u8 *)&D_8018E9EC) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018E9EC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018EC70[])(void); - -void func_80159968(void *a0) { - D_8018EC70[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018EDC4[])(void); - -void func_80159B70(void *a0) { - D_8018EDC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018EBE0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EBE0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018EDCC[])(void); - -void func_8015A264(void *a0) { - D_8018EDCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018EBF0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EBF0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018EC7C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018EC00; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018EC00); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018EC7C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EC10 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018EC10; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018EC10); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018EDD4[])(void); - -void func_8015AD3C(void *a0) { - D_8018EDD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8015444C.c b/src/ov_SC03_006/ov_SC03_006_jr_8015444C.c new file mode 100644 index 000000000..afcc946eb --- /dev/null +++ b/src/ov_SC03_006/ov_SC03_006_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EB18; +extern u8 D_8018EA88; +extern u8 D_8018EA64; +extern u8 D_8018EA40; +extern u8 D_8018EAF4; +extern u8 D_8018EAD0; +extern u8 D_8018EAAC; +extern u8 D_8018EA1C; +extern void func_80145934(void); +extern u8 D_8018EBA8; +extern u8 D_8018EB84; +extern u8 D_8018EB60; +extern u8 D_8018EB3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DFA0[]; +extern unsigned char D_8018DFD0[]; +extern unsigned char D_8018E020[]; +extern unsigned char D_8018E050[]; +extern unsigned char D_8018E080[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E0D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E198[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E220[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E228; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F61D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F61DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E258; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E300[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E324[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E314; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E344[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E354[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E36C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E35C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E380[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E39C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E38C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E3B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E3C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E3D8; +extern void (*D_8018E400[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E3E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018E40C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018E40C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018E44C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018E44C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018E450[])(void); + +void func_80155580(void *a0) { + D_8018E450[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018E644[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018E644[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018E8B4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E8B4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018E8B4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018E8C4[])(void); + +void func_80157544(void *a0) { + D_8018E8C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801F6210; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801F6210 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801F6210 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018E8EC[])(void); +extern int D_801F6210; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018E8EC[*(unsigned short *)((char *)param_1 + 2)](); + D_801F6210 = D_801F6210 - 1; + if (D_801F6210 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E8CC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018E8CC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018E8DC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018E8DC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018E92C[])(void); + +void func_80157DC4(void *a0) { + D_8018E92C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018E934[])(void); + +void func_80157FC4(void *a0) { + D_8018E934[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018E900; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018E900); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018E940[])(void); + +void func_8015824C(void *a0) { + D_8018E940[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018E910; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018E910); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801F6218; +extern s32 D_801F6224; +extern s32 D_801F6228; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801F6218 = 0; + D_801F6224 = 1; + D_801F6228 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801F6218; +extern s32 D_801F6224; +extern s32 D_801F6228; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801F6218 = 0; + D_801F6224 = 1; + D_801F6228 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018E97C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018E97C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801F6218; + +void func_80158BB0(void *arg0) { + if (D_801F6218 == 0) { + D_801F6218 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801F6224; +extern s32 D_8018E950[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801F6224; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018E950[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801F6228; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801F6228 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6218; +extern s32 D_801F6220; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801F6218 == 4) { + D_801F6218 = 5; + } + if (D_801F6220 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018E9B8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018E9B8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_801594E8); + + +extern void (*D_8018EBCC[])(void); + +void func_80159698(void *a0) { + D_8018EBCC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018E9EC)); + func_80028620(1, &(*(u8 *)&D_8018E9EC) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018E9EC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018EC70[])(void); + +void func_80159968(void *a0) { + D_8018EC70[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018EDC4[])(void); + +void func_80159B70(void *a0) { + D_8018EDC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018EBE0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EBE0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018EDCC[])(void); + +void func_8015A264(void *a0) { + D_8018EDCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018EBF0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EBF0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8015A3C8.c b/src/ov_SC03_006/ov_SC03_006_jr_8015A3C8.c new file mode 100644 index 000000000..56767f1d3 --- /dev/null +++ b/src/ov_SC03_006/ov_SC03_006_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EB18; +extern u8 D_8018EA88; +extern u8 D_8018EA64; +extern u8 D_8018EA40; +extern u8 D_8018EAF4; +extern u8 D_8018EAD0; +extern u8 D_8018EAAC; +extern u8 D_8018EA1C; +extern void func_80145934(void); +extern u8 D_8018EBA8; +extern u8 D_8018EB84; +extern u8 D_8018EB60; +extern u8 D_8018EB3C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DFA0[]; +extern unsigned char D_8018DFD0[]; +extern unsigned char D_8018E020[]; +extern unsigned char D_8018E050[]; +extern unsigned char D_8018E080[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E0D0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E198[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E220[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E228; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F61D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F61DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E258; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E300[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E324[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E314; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E344[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E354[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E36C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E35C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E380[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E39C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E38C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E3B0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E3C4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E3D8; +extern void (*D_8018E400[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E3E0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E44C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E450[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E8B4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018E8C4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F6210; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018E8EC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E8CC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018E8DC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018E92C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018E934[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018E900; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018E940[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018E910; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F6218; +extern s32 D_801F6224; +extern s32 D_801F6228; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018E97C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018E950[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6220; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EBCC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018E9EC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EC70[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018EDC4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EBE0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018EDCC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EBF0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EC7C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018EC00; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018EC00); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EC7C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EC10 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EC10; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018EC10); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018EDD4[])(void); + +void func_8015AD3C(void *a0) { + D_8018EDD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_007/ov_SC03_007_after.c b/src/ov_SC03_007/ov_SC03_007_after.c index 0cd69909f..c6c59fb59 100644 --- a/src/ov_SC03_007/ov_SC03_007_after.c +++ b/src/ov_SC03_007/ov_SC03_007_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_007/nonmatchings/ov_SC03_007_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80189204[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80189204[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80189244[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80189244[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80189248[])(void); - -void func_80155580(void *a0) { - D_80189248[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018943C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018943C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801896AC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801896AC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801896AC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801896BC[])(void); - -void func_80157544(void *a0) { - D_801896BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E8B68; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E8B68 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E8B68 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801896E4[])(void); -extern int D_801E8B68; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801896E4[*(unsigned short *)((char *)param_1 + 2)](); - D_801E8B68 = D_801E8B68 - 1; - if (D_801E8B68 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801896C4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801896C4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801896D4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801896D4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80189724[])(void); - -void func_80157DC4(void *a0) { - D_80189724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018972C[])(void); - -void func_80157FC4(void *a0) { - D_8018972C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801896F8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801896F8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80189738[])(void); - -void func_8015824C(void *a0) { - D_80189738[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80189708; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189708); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E8B70; -extern s32 D_801E8B7C; -extern s32 D_801E8B80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E8B70 = 0; - D_801E8B7C = 1; - D_801E8B80 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E8B70; -extern s32 D_801E8B7C; -extern s32 D_801E8B80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E8B70 = 0; - D_801E8B7C = 1; - D_801E8B80 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80189774[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80189774[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E8B70; - -void func_80158BB0(void *arg0) { - if (D_801E8B70 == 0) { - D_801E8B70 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E8B7C; -extern s32 D_80189748[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E8B7C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189748[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E8B80; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E8B80 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E8B70; -extern s32 D_801E8B78; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E8B70 == 4) { - D_801E8B70 = 5; - } - if (D_801E8B78 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801897B0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801897B0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_801594E8); - - -extern void (*D_801899C4[])(void); - -void func_80159698(void *a0) { - D_801899C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801897E4)); - func_80028620(1, &(*(u8 *)&D_801897E4) + 0x10); - func_80028620(2, &(*(u8 *)&D_801897E4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80189A68[])(void); - -void func_80159968(void *a0) { - D_80189A68[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80189BBC[])(void); - -void func_80159B70(void *a0) { - D_80189BBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801899D8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801899D8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80189BC4[])(void); - -void func_8015A264(void *a0) { - D_80189BC4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801899E8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801899E8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80189A74[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 *D_801899F8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80189A74[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801899F8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80189A74[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189A08 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80189A08; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80189A08); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80189BCC[])(void); - -void func_8015AD3C(void *a0) { - D_80189BCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8015444C.c b/src/ov_SC03_007/ov_SC03_007_jr_8015444C.c new file mode 100644 index 000000000..35b6a3844 --- /dev/null +++ b/src/ov_SC03_007/ov_SC03_007_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189910; +extern u8 D_80189880; +extern u8 D_8018985C; +extern u8 D_80189838; +extern u8 D_801898EC; +extern u8 D_801898C8; +extern u8 D_801898A4; +extern u8 D_80189814; +extern void func_80145934(void); +extern u8 D_801899A0; +extern u8 D_8018997C; +extern u8 D_80189958; +extern u8 D_80189934; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80188D98[]; +extern unsigned char D_80188DC8[]; +extern unsigned char D_80188E18[]; +extern unsigned char D_80188E48[]; +extern unsigned char D_80188E78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188EC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188F90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189018[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189020; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E8B30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E8B34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189050; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801890F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018911C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018910C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189130[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018913C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018914C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189164[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189154; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189178[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189194[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189184; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801891A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801891BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801891D0; +extern void (*D_801891F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801891D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80189204[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80189204[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80189244[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80189244[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80189248[])(void); + +void func_80155580(void *a0) { + D_80189248[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018943C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018943C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801896AC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801896AC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801896AC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801896BC[])(void); + +void func_80157544(void *a0) { + D_801896BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E8B68; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E8B68 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E8B68 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801896E4[])(void); +extern int D_801E8B68; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801896E4[*(unsigned short *)((char *)param_1 + 2)](); + D_801E8B68 = D_801E8B68 - 1; + if (D_801E8B68 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801896C4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801896C4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801896D4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801896D4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80189724[])(void); + +void func_80157DC4(void *a0) { + D_80189724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018972C[])(void); + +void func_80157FC4(void *a0) { + D_8018972C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801896F8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801896F8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80189738[])(void); + +void func_8015824C(void *a0) { + D_80189738[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80189708; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189708); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E8B70; +extern s32 D_801E8B7C; +extern s32 D_801E8B80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E8B70 = 0; + D_801E8B7C = 1; + D_801E8B80 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E8B70; +extern s32 D_801E8B7C; +extern s32 D_801E8B80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E8B70 = 0; + D_801E8B7C = 1; + D_801E8B80 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80189774[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80189774[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E8B70; + +void func_80158BB0(void *arg0) { + if (D_801E8B70 == 0) { + D_801E8B70 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E8B7C; +extern s32 D_80189748[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E8B7C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189748[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E8B80; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E8B80 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E8B70; +extern s32 D_801E8B78; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E8B70 == 4) { + D_801E8B70 = 5; + } + if (D_801E8B78 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801897B0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801897B0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_801594E8); + + +extern void (*D_801899C4[])(void); + +void func_80159698(void *a0) { + D_801899C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801897E4)); + func_80028620(1, &(*(u8 *)&D_801897E4) + 0x10); + func_80028620(2, &(*(u8 *)&D_801897E4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80189A68[])(void); + +void func_80159968(void *a0) { + D_80189A68[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80189BBC[])(void); + +void func_80159B70(void *a0) { + D_80189BBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801899D8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801899D8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80189BC4[])(void); + +void func_8015A264(void *a0) { + D_80189BC4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801899E8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801899E8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_007/ov_SC03_007_jr_8015A3C8.c b/src/ov_SC03_007/ov_SC03_007_jr_8015A3C8.c new file mode 100644 index 000000000..db21fcc5a --- /dev/null +++ b/src/ov_SC03_007/ov_SC03_007_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189910; +extern u8 D_80189880; +extern u8 D_8018985C; +extern u8 D_80189838; +extern u8 D_801898EC; +extern u8 D_801898C8; +extern u8 D_801898A4; +extern u8 D_80189814; +extern void func_80145934(void); +extern u8 D_801899A0; +extern u8 D_8018997C; +extern u8 D_80189958; +extern u8 D_80189934; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80188D98[]; +extern unsigned char D_80188DC8[]; +extern unsigned char D_80188E18[]; +extern unsigned char D_80188E48[]; +extern unsigned char D_80188E78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188EC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188F90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189018[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189020; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E8B30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E8B34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189050; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801890F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018911C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018910C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189130[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018913C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018914C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189164[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189154; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189178[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189194[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189184; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801891A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801891BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801891D0; +extern void (*D_801891F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801891D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189244[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189248[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801896AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801896BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E8B68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801896E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801896C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801896D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189724[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018972C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801896F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189738[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189708; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E8B70; +extern s32 D_801E8B7C; +extern s32 D_801E8B80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189774[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189748[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E8B78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801899C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801897E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189A68[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189BBC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801899D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189BC4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801899E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189A74[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 *D_801899F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189A74[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801899F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189A74[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189A08 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189A08; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80189A08); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80189BCC[])(void); + +void func_8015AD3C(void *a0) { + D_80189BCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_010/ov_SC03_010_after.c b/src/ov_SC03_010/ov_SC03_010_after.c index 880caac98..6fe797ae5 100644 --- a/src/ov_SC03_010/ov_SC03_010_after.c +++ b/src/ov_SC03_010/ov_SC03_010_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_010/nonmatchings/ov_SC03_010_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80181D24[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80181D24[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181D64[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181D64[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181D68[])(void); - -void func_80155580(void *a0) { - D_80181D68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181F5C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181F5C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801821CC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801821CC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801821CC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801821DC[])(void); - -void func_80157544(void *a0) { - D_801821DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019EDC8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019EDC8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019EDC8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182204[])(void); -extern int D_8019EDC8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182204[*(unsigned short *)((char *)param_1 + 2)](); - D_8019EDC8 = D_8019EDC8 - 1; - if (D_8019EDC8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801821E4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801821E4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801821F4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801821F4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182244[])(void); - -void func_80157DC4(void *a0) { - D_80182244[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018224C[])(void); - -void func_80157FC4(void *a0) { - D_8018224C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182218; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182218); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80182258[])(void); - -void func_8015824C(void *a0) { - D_80182258[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182228; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182228); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019EDD0; -extern s32 D_8019EDDC; -extern s32 D_8019EDE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019EDD0 = 0; - D_8019EDDC = 1; - D_8019EDE0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019EDD0; -extern s32 D_8019EDDC; -extern s32 D_8019EDE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019EDD0 = 0; - D_8019EDDC = 1; - D_8019EDE0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80182294[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80182294[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019EDD0; - -void func_80158BB0(void *arg0) { - if (D_8019EDD0 == 0) { - D_8019EDD0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019EDDC; -extern s32 D_80182268[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019EDDC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182268[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019EDE0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019EDE0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019EDD0; -extern s32 D_8019EDD8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019EDD0 == 4) { - D_8019EDD0 = 5; - } - if (D_8019EDD8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801822D0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801822D0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_801594E8); - - -extern void (*D_801824E4[])(void); - -void func_80159698(void *a0) { - D_801824E4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80182304)); - func_80028620(1, &(*(u8 *)&D_80182304) + 0x10); - func_80028620(2, &(*(u8 *)&D_80182304) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80182588[])(void); - -void func_80159968(void *a0) { - D_80182588[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801826DC[])(void); - -void func_80159B70(void *a0) { - D_801826DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801824F8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801824F8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801826E4[])(void); - -void func_8015A264(void *a0) { - D_801826E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80182508; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182508); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182594[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80182518; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182594[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182518)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182594[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182528 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182528; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182528); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801826EC[])(void); - -void func_8015AD3C(void *a0) { - D_801826EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8015444C.c b/src/ov_SC03_010/ov_SC03_010_jr_8015444C.c new file mode 100644 index 000000000..4bd4e2c89 --- /dev/null +++ b/src/ov_SC03_010/ov_SC03_010_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182430; +extern u8 D_801823A0; +extern u8 D_8018237C; +extern u8 D_80182358; +extern u8 D_8018240C; +extern u8 D_801823E8; +extern u8 D_801823C4; +extern u8 D_80182334; +extern void func_80145934(void); +extern u8 D_801824C0; +extern u8 D_8018249C; +extern u8 D_80182478; +extern u8 D_80182454; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818B8[]; +extern unsigned char D_801818E8[]; +extern unsigned char D_80181938[]; +extern unsigned char D_80181968[]; +extern unsigned char D_80181998[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801819E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AB0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B38[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B40; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ED90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ED94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181B70; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C18[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C3C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C2C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C50[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C5C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181C6C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181C84[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181C74; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181C98[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CB4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CA4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181CC8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181CDC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181CF0; +extern void (*D_80181D18[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181CF8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80181D24[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80181D24[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181D64[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181D64[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181D68[])(void); + +void func_80155580(void *a0) { + D_80181D68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181F5C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181F5C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801821CC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801821CC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801821CC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801821DC[])(void); + +void func_80157544(void *a0) { + D_801821DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019EDC8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019EDC8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019EDC8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182204[])(void); +extern int D_8019EDC8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182204[*(unsigned short *)((char *)param_1 + 2)](); + D_8019EDC8 = D_8019EDC8 - 1; + if (D_8019EDC8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801821E4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801821E4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801821F4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801821F4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182244[])(void); + +void func_80157DC4(void *a0) { + D_80182244[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018224C[])(void); + +void func_80157FC4(void *a0) { + D_8018224C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182218; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182218); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80182258[])(void); + +void func_8015824C(void *a0) { + D_80182258[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182228; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182228); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019EDD0; +extern s32 D_8019EDDC; +extern s32 D_8019EDE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019EDD0 = 0; + D_8019EDDC = 1; + D_8019EDE0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019EDD0; +extern s32 D_8019EDDC; +extern s32 D_8019EDE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019EDD0 = 0; + D_8019EDDC = 1; + D_8019EDE0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80182294[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80182294[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019EDD0; + +void func_80158BB0(void *arg0) { + if (D_8019EDD0 == 0) { + D_8019EDD0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019EDDC; +extern s32 D_80182268[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019EDDC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182268[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019EDE0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019EDE0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019EDD0; +extern s32 D_8019EDD8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019EDD0 == 4) { + D_8019EDD0 = 5; + } + if (D_8019EDD8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801822D0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801822D0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_801594E8); + + +extern void (*D_801824E4[])(void); + +void func_80159698(void *a0) { + D_801824E4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80182304)); + func_80028620(1, &(*(u8 *)&D_80182304) + 0x10); + func_80028620(2, &(*(u8 *)&D_80182304) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80182588[])(void); + +void func_80159968(void *a0) { + D_80182588[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801826DC[])(void); + +void func_80159B70(void *a0) { + D_801826DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801824F8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801824F8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801826E4[])(void); + +void func_8015A264(void *a0) { + D_801826E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80182508; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182508); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_010/ov_SC03_010_jr_8015A3C8.c b/src/ov_SC03_010/ov_SC03_010_jr_8015A3C8.c new file mode 100644 index 000000000..e0945dcb7 --- /dev/null +++ b/src/ov_SC03_010/ov_SC03_010_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182430; +extern u8 D_801823A0; +extern u8 D_8018237C; +extern u8 D_80182358; +extern u8 D_8018240C; +extern u8 D_801823E8; +extern u8 D_801823C4; +extern u8 D_80182334; +extern void func_80145934(void); +extern u8 D_801824C0; +extern u8 D_8018249C; +extern u8 D_80182478; +extern u8 D_80182454; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818B8[]; +extern unsigned char D_801818E8[]; +extern unsigned char D_80181938[]; +extern unsigned char D_80181968[]; +extern unsigned char D_80181998[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801819E8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AB0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B38[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B40; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ED90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ED94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181B70; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C18[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C3C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C2C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C50[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C5C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181C6C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181C84[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181C74; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181C98[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CB4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CA4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181CC8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181CDC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181CF0; +extern void (*D_80181D18[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181CF8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181D64[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181D68[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801821CC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801821DC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019EDC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182204[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801821E4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801821F4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182244[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018224C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182218; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182258[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182228; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019EDD0; +extern s32 D_8019EDDC; +extern s32 D_8019EDE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182294[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182268[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019EDD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801824E4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182304[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182588[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801826DC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801824F8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801826E4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182508; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182594[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80182518; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182594[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182518)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182594[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182528 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182528; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182528); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801826EC[])(void); + +void func_8015AD3C(void *a0) { + D_801826EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_011/ov_SC03_011_after.c b/src/ov_SC03_011/ov_SC03_011_after.c index 31bd123ef..6d7dabfb4 100644 --- a/src/ov_SC03_011/ov_SC03_011_after.c +++ b/src/ov_SC03_011/ov_SC03_011_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_011/nonmatchings/ov_SC03_011_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183094[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183094[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801830D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801830D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801830D8[])(void); - -void func_80155580(void *a0) { - D_801830D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801832CC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801832CC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018353C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018353C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018353C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018354C[])(void); - -void func_80157544(void *a0) { - D_8018354C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A1060; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A1060 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A1060 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80183574[])(void); -extern int D_801A1060; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80183574[*(unsigned short *)((char *)param_1 + 2)](); - D_801A1060 = D_801A1060 - 1; - if (D_801A1060 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80183554; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183554); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80183564; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183564); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801835B4[])(void); - -void func_80157DC4(void *a0) { - D_801835B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801835BC[])(void); - -void func_80157FC4(void *a0) { - D_801835BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80183588; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80183588); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801835C8[])(void); - -void func_8015824C(void *a0) { - D_801835C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80183598; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183598); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A1068; -extern s32 D_801A1074; -extern s32 D_801A1078; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A1068 = 0; - D_801A1074 = 1; - D_801A1078 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A1068; -extern s32 D_801A1074; -extern s32 D_801A1078; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A1068 = 0; - D_801A1074 = 1; - D_801A1078 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80183604[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80183604[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A1068; - -void func_80158BB0(void *arg0) { - if (D_801A1068 == 0) { - D_801A1068 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A1074; -extern s32 D_801835D8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A1074; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801835D8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A1078; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A1078 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A1068; -extern s32 D_801A1070; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A1068 == 4) { - D_801A1068 = 5; - } - if (D_801A1070 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80183640[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80183640; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_801594E8); - - -extern void (*D_80183854[])(void); - -void func_80159698(void *a0) { - D_80183854[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80183674)); - func_80028620(1, &(*(u8 *)&D_80183674) + 0x10); - func_80028620(2, &(*(u8 *)&D_80183674) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801838F8[])(void); - -void func_80159968(void *a0) { - D_801838F8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183A4C[])(void); - -void func_80159B70(void *a0) { - D_80183A4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80183868; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183868); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80183A54[])(void); - -void func_8015A264(void *a0) { - D_80183A54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80183878; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183878); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80183904[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80183888; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80183904[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183888); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80183904[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183898 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80183898; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80183898); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183A5C[])(void); - -void func_8015AD3C(void *a0) { - D_80183A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8015444C.c b/src/ov_SC03_011/ov_SC03_011_jr_8015444C.c new file mode 100644 index 000000000..867f446b7 --- /dev/null +++ b/src/ov_SC03_011/ov_SC03_011_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801837A0; +extern u8 D_80183710; +extern u8 D_801836EC; +extern u8 D_801836C8; +extern u8 D_8018377C; +extern u8 D_80183758; +extern u8 D_80183734; +extern u8 D_801836A4; +extern void func_80145934(void); +extern u8 D_80183830; +extern u8 D_8018380C; +extern u8 D_801837E8; +extern u8 D_801837C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182C28[]; +extern unsigned char D_80182C58[]; +extern unsigned char D_80182CA8[]; +extern unsigned char D_80182CD8[]; +extern unsigned char D_80182D08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182D58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182E20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182EA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182EB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A1028; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A102C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182EE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182F88[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182FAC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182F9C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182FC0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182FCC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182FDC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182FF4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182FE4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183008[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183024[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183014; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183038[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018304C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183060; +extern void (*D_80183088[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183068; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183094[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183094[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801830D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801830D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801830D8[])(void); + +void func_80155580(void *a0) { + D_801830D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801832CC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801832CC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018353C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018353C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018353C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018354C[])(void); + +void func_80157544(void *a0) { + D_8018354C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A1060; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A1060 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A1060 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80183574[])(void); +extern int D_801A1060; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80183574[*(unsigned short *)((char *)param_1 + 2)](); + D_801A1060 = D_801A1060 - 1; + if (D_801A1060 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183554; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183554); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80183564; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183564); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801835B4[])(void); + +void func_80157DC4(void *a0) { + D_801835B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801835BC[])(void); + +void func_80157FC4(void *a0) { + D_801835BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80183588; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80183588); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801835C8[])(void); + +void func_8015824C(void *a0) { + D_801835C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80183598; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183598); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A1068; +extern s32 D_801A1074; +extern s32 D_801A1078; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A1068 = 0; + D_801A1074 = 1; + D_801A1078 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A1068; +extern s32 D_801A1074; +extern s32 D_801A1078; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A1068 = 0; + D_801A1074 = 1; + D_801A1078 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80183604[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80183604[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A1068; + +void func_80158BB0(void *arg0) { + if (D_801A1068 == 0) { + D_801A1068 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A1074; +extern s32 D_801835D8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A1074; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801835D8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A1078; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A1078 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A1068; +extern s32 D_801A1070; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A1068 == 4) { + D_801A1068 = 5; + } + if (D_801A1070 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80183640[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80183640; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_801594E8); + + +extern void (*D_80183854[])(void); + +void func_80159698(void *a0) { + D_80183854[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80183674)); + func_80028620(1, &(*(u8 *)&D_80183674) + 0x10); + func_80028620(2, &(*(u8 *)&D_80183674) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801838F8[])(void); + +void func_80159968(void *a0) { + D_801838F8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183A4C[])(void); + +void func_80159B70(void *a0) { + D_80183A4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80183868; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183868); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80183A54[])(void); + +void func_8015A264(void *a0) { + D_80183A54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80183878; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183878); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8015A3C8.c b/src/ov_SC03_011/ov_SC03_011_jr_8015A3C8.c new file mode 100644 index 000000000..10d2930ab --- /dev/null +++ b/src/ov_SC03_011/ov_SC03_011_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801837A0; +extern u8 D_80183710; +extern u8 D_801836EC; +extern u8 D_801836C8; +extern u8 D_8018377C; +extern u8 D_80183758; +extern u8 D_80183734; +extern u8 D_801836A4; +extern void func_80145934(void); +extern u8 D_80183830; +extern u8 D_8018380C; +extern u8 D_801837E8; +extern u8 D_801837C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182C28[]; +extern unsigned char D_80182C58[]; +extern unsigned char D_80182CA8[]; +extern unsigned char D_80182CD8[]; +extern unsigned char D_80182D08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182D58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182E20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182EA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182EB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A1028; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A102C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182EE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182F88[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182FAC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182F9C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182FC0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182FCC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182FDC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182FF4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182FE4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183008[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183024[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183014; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183038[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018304C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183060; +extern void (*D_80183088[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183068; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801830D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801830D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018353C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018354C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A1060; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183574[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183554; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183564; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801835B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801835BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183588; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801835C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183598; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A1068; +extern s32 D_801A1074; +extern s32 D_801A1078; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80183604[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801835D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A1070; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183854[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183674[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801838F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183A4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183868; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183A54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183878; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183904[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80183888; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183904[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183888); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183904[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183898 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183898; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80183898); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183A5C[])(void); + +void func_8015AD3C(void *a0) { + D_80183A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_012/ov_SC03_012_after.c b/src/ov_SC03_012/ov_SC03_012_after.c index f121e1abd..d821b7ed2 100644 --- a/src/ov_SC03_012/ov_SC03_012_after.c +++ b/src/ov_SC03_012/ov_SC03_012_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_012/nonmatchings/ov_SC03_012_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FF74[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FF74[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017FFB4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017FFB4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017FFB8[])(void); - -void func_80155580(void *a0) { - D_8017FFB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801801AC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801801AC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018041C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018041C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018041C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018042C[])(void); - -void func_80157544(void *a0) { - D_8018042C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80193E80; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80193E80 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80193E80 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180454[])(void); -extern int D_80193E80; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180454[*(unsigned short *)((char *)param_1 + 2)](); - D_80193E80 = D_80193E80 - 1; - if (D_80193E80 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180434; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180434); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180444; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180444); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180494[])(void); - -void func_80157DC4(void *a0) { - D_80180494[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018049C[])(void); - -void func_80157FC4(void *a0) { - D_8018049C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180468; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180468); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801804A8[])(void); - -void func_8015824C(void *a0) { - D_801804A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180478; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180478); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80193E88; -extern s32 D_80193E94; -extern s32 D_80193E98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80193E88 = 0; - D_80193E94 = 1; - D_80193E98 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80193E88; -extern s32 D_80193E94; -extern s32 D_80193E98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80193E88 = 0; - D_80193E94 = 1; - D_80193E98 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801804E4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801804E4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80193E88; - -void func_80158BB0(void *arg0) { - if (D_80193E88 == 0) { - D_80193E88 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80193E94; -extern s32 D_801804B8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80193E94; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801804B8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80193E98; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80193E98 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80193E88; -extern s32 D_80193E90; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80193E88 == 4) { - D_80193E88 = 5; - } - if (D_80193E90 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180520[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180520; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_801594E8); - - -extern void (*D_80180734[])(void); - -void func_80159698(void *a0) { - D_80180734[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180554)); - func_80028620(1, &(*(u8 *)&D_80180554) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180554) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801807D8[])(void); - -void func_80159968(void *a0) { - D_801807D8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018092C[])(void); - -void func_80159B70(void *a0) { - D_8018092C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80180748; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180748); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180934[])(void); - -void func_8015A264(void *a0) { - D_80180934[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80180758; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180758); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801807E4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80180768; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801807E4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180768); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801807E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180778 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180778; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180778); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018093C[])(void); - -void func_8015AD3C(void *a0) { - D_8018093C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8015444C.c b/src/ov_SC03_012/ov_SC03_012_jr_8015444C.c new file mode 100644 index 000000000..95032c44a --- /dev/null +++ b/src/ov_SC03_012/ov_SC03_012_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180680; +extern u8 D_801805F0; +extern u8 D_801805CC; +extern u8 D_801805A8; +extern u8 D_8018065C; +extern u8 D_80180638; +extern u8 D_80180614; +extern u8 D_80180584; +extern void func_80145934(void); +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB08[]; +extern unsigned char D_8017FB38[]; +extern unsigned char D_8017FB88[]; +extern unsigned char D_8017FBB8[]; +extern unsigned char D_8017FBE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FD88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FD90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FDC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FE68[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FE8C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FE7C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEA0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FEAC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FEBC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FED4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FEC4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FEE8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF04[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FEF4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF18[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF2C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF40; +extern void (*D_8017FF68[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF48; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FF74[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FF74[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017FFB4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017FFB4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017FFB8[])(void); + +void func_80155580(void *a0) { + D_8017FFB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801801AC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801801AC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018041C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018041C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018041C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018042C[])(void); + +void func_80157544(void *a0) { + D_8018042C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80193E80; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80193E80 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80193E80 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180454[])(void); +extern int D_80193E80; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180454[*(unsigned short *)((char *)param_1 + 2)](); + D_80193E80 = D_80193E80 - 1; + if (D_80193E80 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180434; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180434); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180444; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180444); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180494[])(void); + +void func_80157DC4(void *a0) { + D_80180494[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018049C[])(void); + +void func_80157FC4(void *a0) { + D_8018049C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180468; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180468); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801804A8[])(void); + +void func_8015824C(void *a0) { + D_801804A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180478; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180478); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80193E88; +extern s32 D_80193E94; +extern s32 D_80193E98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80193E88 = 0; + D_80193E94 = 1; + D_80193E98 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80193E88; +extern s32 D_80193E94; +extern s32 D_80193E98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80193E88 = 0; + D_80193E94 = 1; + D_80193E98 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801804E4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801804E4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80193E88; + +void func_80158BB0(void *arg0) { + if (D_80193E88 == 0) { + D_80193E88 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80193E94; +extern s32 D_801804B8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80193E94; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801804B8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80193E98; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80193E98 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E88; +extern s32 D_80193E90; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80193E88 == 4) { + D_80193E88 = 5; + } + if (D_80193E90 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180520[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180520; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_801594E8); + + +extern void (*D_80180734[])(void); + +void func_80159698(void *a0) { + D_80180734[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180554)); + func_80028620(1, &(*(u8 *)&D_80180554) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180554) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801807D8[])(void); + +void func_80159968(void *a0) { + D_801807D8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018092C[])(void); + +void func_80159B70(void *a0) { + D_8018092C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80180748; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180748); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180934[])(void); + +void func_8015A264(void *a0) { + D_80180934[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80180758; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180758); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_012/ov_SC03_012_jr_8015A3C8.c b/src/ov_SC03_012/ov_SC03_012_jr_8015A3C8.c new file mode 100644 index 000000000..01d30ade4 --- /dev/null +++ b/src/ov_SC03_012/ov_SC03_012_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180680; +extern u8 D_801805F0; +extern u8 D_801805CC; +extern u8 D_801805A8; +extern u8 D_8018065C; +extern u8 D_80180638; +extern u8 D_80180614; +extern u8 D_80180584; +extern void func_80145934(void); +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801806C8; +extern u8 D_801806A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB08[]; +extern unsigned char D_8017FB38[]; +extern unsigned char D_8017FB88[]; +extern unsigned char D_8017FBB8[]; +extern unsigned char D_8017FBE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FD88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FD90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FDC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FE68[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FE8C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FE7C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEA0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FEAC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FEBC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FED4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FEC4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FEE8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF04[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FEF4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF18[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF2C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF40; +extern void (*D_8017FF68[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF48; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FFB4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FFB8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018041C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018042C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80193E80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180454[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180434; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180444; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180494[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018049C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180468; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801804A8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180478; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80193E88; +extern s32 D_80193E94; +extern s32 D_80193E98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801804E4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801804B8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180734[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180554[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801807D8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018092C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180748; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180934[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180758; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801807E4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180768; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801807E4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180768); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801807E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180778 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180778; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180778); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018093C[])(void); + +void func_8015AD3C(void *a0) { + D_8018093C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_013/ov_SC03_013_after.c b/src/ov_SC03_013/ov_SC03_013_after.c index f5533c9da..6504e7b68 100644 --- a/src/ov_SC03_013/ov_SC03_013_after.c +++ b/src/ov_SC03_013/ov_SC03_013_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_013/nonmatchings/ov_SC03_013_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80182D5C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80182D5C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182D9C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182D9C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80182DA0[])(void); - -void func_80155580(void *a0) { - D_80182DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182F94[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182F94[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183204 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80183204[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80183204[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80183214[])(void); - -void func_80157544(void *a0) { - D_80183214[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801AC150; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801AC150 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801AC150 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018323C[])(void); -extern int D_801AC150; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018323C[*(unsigned short *)((char *)param_1 + 2)](); - D_801AC150 = D_801AC150 - 1; - if (D_801AC150 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018321C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018321C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018322C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018322C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018327C[])(void); - -void func_80157DC4(void *a0) { - D_8018327C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80183284[])(void); - -void func_80157FC4(void *a0) { - D_80183284[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80183250; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80183250); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80183290[])(void); - -void func_8015824C(void *a0) { - D_80183290[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80183260; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183260); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801AC158; -extern s32 D_801AC164; -extern s32 D_801AC168; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801AC158 = 0; - D_801AC164 = 1; - D_801AC168 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801AC158; -extern s32 D_801AC164; -extern s32 D_801AC168; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801AC158 = 0; - D_801AC164 = 1; - D_801AC168 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801832CC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801832CC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801AC158; - -void func_80158BB0(void *arg0) { - if (D_801AC158 == 0) { - D_801AC158 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801AC164; -extern s32 D_801832A0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801AC164; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801832A0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801AC168; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801AC168 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801AC158; -extern s32 D_801AC160; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801AC158 == 4) { - D_801AC158 = 5; - } - if (D_801AC160 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80183308[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80183308; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_801594E8); - - -extern void (*D_8018351C[])(void); - -void func_80159698(void *a0) { - D_8018351C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018333C)); - func_80028620(1, &(*(u8 *)&D_8018333C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018333C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801835C0[])(void); - -void func_80159968(void *a0) { - D_801835C0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183714[])(void); - -void func_80159B70(void *a0) { - D_80183714[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80183530; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183530); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018371C[])(void); - -void func_8015A264(void *a0) { - D_8018371C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80183540; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183540); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801835CC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80183550; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801835CC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183550); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801835CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183560 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80183560; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80183560); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183724[])(void); - -void func_8015AD3C(void *a0) { - D_80183724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8015444C.c b/src/ov_SC03_013/ov_SC03_013_jr_8015444C.c new file mode 100644 index 000000000..153182809 --- /dev/null +++ b/src/ov_SC03_013/ov_SC03_013_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183468; +extern u8 D_801833D8; +extern u8 D_801833B4; +extern u8 D_80183390; +extern u8 D_80183444; +extern u8 D_80183420; +extern u8 D_801833FC; +extern u8 D_8018336C; +extern void func_80145934(void); +extern u8 D_801834F8; +extern u8 D_801834D4; +extern u8 D_801834B0; +extern u8 D_8018348C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F0[]; +extern unsigned char D_80182920[]; +extern unsigned char D_80182970[]; +extern unsigned char D_801829A0[]; +extern unsigned char D_801829D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AC118; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AC11C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D28; +extern void (*D_80182D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80182D5C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80182D5C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182D9C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182D9C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80182DA0[])(void); + +void func_80155580(void *a0) { + D_80182DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182F94[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182F94[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183204 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80183204[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80183204[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80183214[])(void); + +void func_80157544(void *a0) { + D_80183214[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801AC150; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801AC150 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801AC150 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018323C[])(void); +extern int D_801AC150; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018323C[*(unsigned short *)((char *)param_1 + 2)](); + D_801AC150 = D_801AC150 - 1; + if (D_801AC150 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018321C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018321C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018322C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018322C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018327C[])(void); + +void func_80157DC4(void *a0) { + D_8018327C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80183284[])(void); + +void func_80157FC4(void *a0) { + D_80183284[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80183250; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80183250); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80183290[])(void); + +void func_8015824C(void *a0) { + D_80183290[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80183260; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183260); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801AC158; +extern s32 D_801AC164; +extern s32 D_801AC168; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801AC158 = 0; + D_801AC164 = 1; + D_801AC168 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801AC158; +extern s32 D_801AC164; +extern s32 D_801AC168; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801AC158 = 0; + D_801AC164 = 1; + D_801AC168 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801832CC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801832CC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801AC158; + +void func_80158BB0(void *arg0) { + if (D_801AC158 == 0) { + D_801AC158 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801AC164; +extern s32 D_801832A0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801AC164; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801832A0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801AC168; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801AC168 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801AC158; +extern s32 D_801AC160; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801AC158 == 4) { + D_801AC158 = 5; + } + if (D_801AC160 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80183308[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80183308; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_801594E8); + + +extern void (*D_8018351C[])(void); + +void func_80159698(void *a0) { + D_8018351C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018333C)); + func_80028620(1, &(*(u8 *)&D_8018333C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018333C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801835C0[])(void); + +void func_80159968(void *a0) { + D_801835C0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183714[])(void); + +void func_80159B70(void *a0) { + D_80183714[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80183530; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183530); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018371C[])(void); + +void func_8015A264(void *a0) { + D_8018371C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80183540; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183540); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_013/ov_SC03_013_jr_8015A3C8.c b/src/ov_SC03_013/ov_SC03_013_jr_8015A3C8.c new file mode 100644 index 000000000..b14deadf1 --- /dev/null +++ b/src/ov_SC03_013/ov_SC03_013_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183468; +extern u8 D_801833D8; +extern u8 D_801833B4; +extern u8 D_80183390; +extern u8 D_80183444; +extern u8 D_80183420; +extern u8 D_801833FC; +extern u8 D_8018336C; +extern void func_80145934(void); +extern u8 D_801834F8; +extern u8 D_801834D4; +extern u8 D_801834B0; +extern u8 D_8018348C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F0[]; +extern unsigned char D_80182920[]; +extern unsigned char D_80182970[]; +extern unsigned char D_801829A0[]; +extern unsigned char D_801829D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AC118; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AC11C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D28; +extern void (*D_80182D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182D9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182DA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183204[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183214[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AC150; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018323C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018321C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018322C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018327C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183284[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183250; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183290[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183260; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AC158; +extern s32 D_801AC164; +extern s32 D_801AC168; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801832CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801832A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AC160; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018351C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018333C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801835C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183714[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183530; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018371C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183540; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801835CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80183550; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801835CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80183550); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801835CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183560 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183560; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80183560); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183724[])(void); + +void func_8015AD3C(void *a0) { + D_80183724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_014/ov_SC03_014_after.c b/src/ov_SC03_014/ov_SC03_014_after.c index c78dfe721..c76f0c6ef 100644 --- a/src/ov_SC03_014/ov_SC03_014_after.c +++ b/src/ov_SC03_014/ov_SC03_014_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_014/nonmatchings/ov_SC03_014_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D398[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D398[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D3D8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D3D8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D3DC[])(void); - -void func_80155580(void *a0) { - D_8018D3DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018D5D0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018D5D0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D840 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018D840[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018D840[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018D850[])(void); - -void func_80157544(void *a0) { - D_8018D850[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E96D0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E96D0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E96D0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018D878[])(void); -extern int D_801E96D0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018D878[*(unsigned short *)((char *)param_1 + 2)](); - D_801E96D0 = D_801E96D0 - 1; - if (D_801E96D0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018D858; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D858); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018D868; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D868); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018D8B8[])(void); - -void func_80157DC4(void *a0) { - D_8018D8B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018D8C0[])(void); - -void func_80157FC4(void *a0) { - D_8018D8C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018D88C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018D88C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018D8CC[])(void); - -void func_8015824C(void *a0) { - D_8018D8CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018D89C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D89C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E96D8; -extern s32 D_801E96E4; -extern s32 D_801E96E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E96D8 = 0; - D_801E96E4 = 1; - D_801E96E8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E96D8; -extern s32 D_801E96E4; -extern s32 D_801E96E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E96D8 = 0; - D_801E96E4 = 1; - D_801E96E8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018D908[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018D908[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E96D8; - -void func_80158BB0(void *arg0) { - if (D_801E96D8 == 0) { - D_801E96D8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E96E4; -extern s32 D_8018D8DC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E96E4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D8DC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E96E8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E96E8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E96D8; -extern s32 D_801E96E0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E96D8 == 4) { - D_801E96D8 = 5; - } - if (D_801E96E0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018D944[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018D944; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_801594E8); - - -extern void (*D_8018DB58[])(void); - -void func_80159698(void *a0) { - D_8018DB58[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D978)); - func_80028620(1, &(*(u8 *)&D_8018D978) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D978) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018DBFC[])(void); - -void func_80159968(void *a0) { - D_8018DBFC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018DD50[])(void); - -void func_80159B70(void *a0) { - D_8018DD50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018DB6C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DB6C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018DD58[])(void); - -void func_8015A264(void *a0) { - D_8018DD58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018DB7C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DB7C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018DC08[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018DB8C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018DC08[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DB9C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018DB9C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018DB9C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018DD60[])(void); - -void func_8015AD3C(void *a0) { - D_8018DD60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8015444C.c b/src/ov_SC03_014/ov_SC03_014_jr_8015444C.c new file mode 100644 index 000000000..64ad6a3f4 --- /dev/null +++ b/src/ov_SC03_014/ov_SC03_014_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D398[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D398[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D3D8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D3D8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D3DC[])(void); + +void func_80155580(void *a0) { + D_8018D3DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018D5D0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018D5D0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D840 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018D840[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018D850[])(void); + +void func_80157544(void *a0) { + D_8018D850[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E96D0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E96D0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E96D0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018D878[])(void); +extern int D_801E96D0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018D878[*(unsigned short *)((char *)param_1 + 2)](); + D_801E96D0 = D_801E96D0 - 1; + if (D_801E96D0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D858); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D868); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018D8B8[])(void); + +void func_80157DC4(void *a0) { + D_8018D8B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018D8C0[])(void); + +void func_80157FC4(void *a0) { + D_8018D8C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018D88C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018D88C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018D8CC[])(void); + +void func_8015824C(void *a0) { + D_8018D8CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018D89C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D89C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E96D8 = 0; + D_801E96E4 = 1; + D_801E96E8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E96D8 = 0; + D_801E96E4 = 1; + D_801E96E8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018D908[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018D908[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E96D8; + +void func_80158BB0(void *arg0) { + if (D_801E96D8 == 0) { + D_801E96D8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E96E4; +extern s32 D_8018D8DC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E96E4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D8DC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E96E8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E96E8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96D8; +extern s32 D_801E96E0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E96D8 == 4) { + D_801E96D8 = 5; + } + if (D_801E96E0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018D944[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018D944; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_801594E8); + + +extern void (*D_8018DB58[])(void); + +void func_80159698(void *a0) { + D_8018DB58[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D978)); + func_80028620(1, &(*(u8 *)&D_8018D978) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D978) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018DBFC[])(void); + +void func_80159968(void *a0) { + D_8018DBFC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018DD50[])(void); + +void func_80159B70(void *a0) { + D_8018DD50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018DB6C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DB6C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018DD58[])(void); + +void func_8015A264(void *a0) { + D_8018DD58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018DB7C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DB7C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.c b/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.c new file mode 100644 index 000000000..337e5d1fc --- /dev/null +++ b/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D3D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D3DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D850[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E96D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D878[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D8B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D8C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D88C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D8CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D89C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D908[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D8DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DB58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D978[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DBFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DD50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DB6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DD58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DB7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DC08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DB8C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DB9C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DB9C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018DB9C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018DD60[])(void); + +void func_8015AD3C(void *a0) { + D_8018DD60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_015/ov_SC03_015_after.c b/src/ov_SC03_015/ov_SC03_015_after.c index 17e181caf..ba9963b53 100644 --- a/src/ov_SC03_015/ov_SC03_015_after.c +++ b/src/ov_SC03_015/ov_SC03_015_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_015/nonmatchings/ov_SC03_015_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D398[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D398[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D3D8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D3D8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D3DC[])(void); - -void func_80155580(void *a0) { - D_8018D3DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018D5D0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018D5D0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D840 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018D840[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018D840[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018D850[])(void); - -void func_80157544(void *a0) { - D_8018D850[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E96D0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E96D0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E96D0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018D878[])(void); -extern int D_801E96D0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018D878[*(unsigned short *)((char *)param_1 + 2)](); - D_801E96D0 = D_801E96D0 - 1; - if (D_801E96D0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018D858; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D858); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018D868; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D868); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018D8B8[])(void); - -void func_80157DC4(void *a0) { - D_8018D8B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018D8C0[])(void); - -void func_80157FC4(void *a0) { - D_8018D8C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018D88C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018D88C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018D8CC[])(void); - -void func_8015824C(void *a0) { - D_8018D8CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018D89C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D89C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E96D8; -extern s32 D_801E96E4; -extern s32 D_801E96E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E96D8 = 0; - D_801E96E4 = 1; - D_801E96E8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E96D8; -extern s32 D_801E96E4; -extern s32 D_801E96E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E96D8 = 0; - D_801E96E4 = 1; - D_801E96E8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018D908[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018D908[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E96D8; - -void func_80158BB0(void *arg0) { - if (D_801E96D8 == 0) { - D_801E96D8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E96E4; -extern s32 D_8018D8DC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E96E4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D8DC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E96E8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E96E8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E96D8; -extern s32 D_801E96E0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E96D8 == 4) { - D_801E96D8 = 5; - } - if (D_801E96E0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018D944[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018D944; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_801594E8); - - -extern void (*D_8018DB58[])(void); - -void func_80159698(void *a0) { - D_8018DB58[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D978)); - func_80028620(1, &(*(u8 *)&D_8018D978) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D978) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018DBFC[])(void); - -void func_80159968(void *a0) { - D_8018DBFC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018DD50[])(void); - -void func_80159B70(void *a0) { - D_8018DD50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018DB6C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DB6C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018DD58[])(void); - -void func_8015A264(void *a0) { - D_8018DD58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018DB7C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DB7C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018DC08[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018DB8C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018DC08[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018DC08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DB9C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018DB9C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018DB9C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018DD60[])(void); - -void func_8015AD3C(void *a0) { - D_8018DD60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8015444C.c b/src/ov_SC03_015/ov_SC03_015_jr_8015444C.c new file mode 100644 index 000000000..017fa62a6 --- /dev/null +++ b/src/ov_SC03_015/ov_SC03_015_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D398[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D398[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D3D8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D3D8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D3DC[])(void); + +void func_80155580(void *a0) { + D_8018D3DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018D5D0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018D5D0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018D840 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018D840[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018D850[])(void); + +void func_80157544(void *a0) { + D_8018D850[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E96D0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E96D0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E96D0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018D878[])(void); +extern int D_801E96D0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018D878[*(unsigned short *)((char *)param_1 + 2)](); + D_801E96D0 = D_801E96D0 - 1; + if (D_801E96D0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018D858); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018D868); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018D8B8[])(void); + +void func_80157DC4(void *a0) { + D_8018D8B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018D8C0[])(void); + +void func_80157FC4(void *a0) { + D_8018D8C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018D88C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018D88C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018D8CC[])(void); + +void func_8015824C(void *a0) { + D_8018D8CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018D89C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018D89C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E96D8 = 0; + D_801E96E4 = 1; + D_801E96E8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E96D8 = 0; + D_801E96E4 = 1; + D_801E96E8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018D908[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018D908[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E96D8; + +void func_80158BB0(void *arg0) { + if (D_801E96D8 == 0) { + D_801E96D8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E96E4; +extern s32 D_8018D8DC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E96E4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D8DC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E96E8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E96E8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96D8; +extern s32 D_801E96E0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E96D8 == 4) { + D_801E96D8 = 5; + } + if (D_801E96E0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018D944[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018D944; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_801594E8); + + +extern void (*D_8018DB58[])(void); + +void func_80159698(void *a0) { + D_8018DB58[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D978)); + func_80028620(1, &(*(u8 *)&D_8018D978) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D978) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018DBFC[])(void); + +void func_80159968(void *a0) { + D_8018DBFC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018DD50[])(void); + +void func_80159B70(void *a0) { + D_8018DD50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018DB6C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DB6C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018DD58[])(void); + +void func_8015A264(void *a0) { + D_8018DD58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018DB7C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DB7C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.c b/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.c new file mode 100644 index 000000000..337e5d1fc --- /dev/null +++ b/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DAA4; +extern u8 D_8018DA14; +extern u8 D_8018D9F0; +extern u8 D_8018D9CC; +extern u8 D_8018DA80; +extern u8 D_8018DA5C; +extern u8 D_8018DA38; +extern u8 D_8018D9A8; +extern void func_80145934(void); +extern u8 D_8018DB34; +extern u8 D_8018DB10; +extern u8 D_8018DAEC; +extern u8 D_8018DAC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018CF2C[]; +extern unsigned char D_8018CF5C[]; +extern unsigned char D_8018CFAC[]; +extern unsigned char D_8018CFDC[]; +extern unsigned char D_8018D00C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D05C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D124[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D1AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D1B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E9698; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E969C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D1E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D28C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D2B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D2A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D2C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D2D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D2E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D2F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D2E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D30C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D328[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D318; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D33C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D350[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D364; +extern void (*D_8018D38C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D36C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D3D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D3DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018D840[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018D850[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E96D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018D878[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018D858; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018D868; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D8B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D8C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018D88C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D8CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018D89C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E96D8; +extern s32 D_801E96E4; +extern s32 D_801E96E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D908[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D8DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E96E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DB58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D978[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018DBFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018DD50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DB6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018DD58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DB7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018DC08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DB8C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018DC08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DB8C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018DC08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018DB9C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018DB9C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018DB9C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018DD60[])(void); + +void func_8015AD3C(void *a0) { + D_8018DD60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_023/ov_SC03_023_after.c b/src/ov_SC03_023/ov_SC03_023_after.c index 9d9f71110..d05084ad5 100644 --- a/src/ov_SC03_023/ov_SC03_023_after.c +++ b/src/ov_SC03_023/ov_SC03_023_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_023/nonmatchings/ov_SC03_023_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180D14[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180D14[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180D54[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180D54[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180D58[])(void); - -void func_80155580(void *a0) { - D_80180D58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180F4C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180F4C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801811BC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801811BC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801811BC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801811CC[])(void); - -void func_80157544(void *a0) { - D_801811CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80197AA8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80197AA8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80197AA8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801811F4[])(void); -extern int D_80197AA8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801811F4[*(unsigned short *)((char *)param_1 + 2)](); - D_80197AA8 = D_80197AA8 - 1; - if (D_80197AA8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801811D4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801811D4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801811E4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801811E4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181234[])(void); - -void func_80157DC4(void *a0) { - D_80181234[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018123C[])(void); - -void func_80157FC4(void *a0) { - D_8018123C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181208; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181208); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80181248[])(void); - -void func_8015824C(void *a0) { - D_80181248[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80181218; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181218); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80197AB0; -extern s32 D_80197ABC; -extern s32 D_80197AC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80197AB0 = 0; - D_80197ABC = 1; - D_80197AC0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80197AB0; -extern s32 D_80197ABC; -extern s32 D_80197AC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80197AB0 = 0; - D_80197ABC = 1; - D_80197AC0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181284[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181284[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80197AB0; - -void func_80158BB0(void *arg0) { - if (D_80197AB0 == 0) { - D_80197AB0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80197ABC; -extern s32 D_80181258[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80197ABC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181258[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80197AC0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80197AC0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80197AB0; -extern s32 D_80197AB8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80197AB0 == 4) { - D_80197AB0 = 5; - } - if (D_80197AB8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801812C0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801812C0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_801594E8); - - -extern void (*D_801814D4[])(void); - -void func_80159698(void *a0) { - D_801814D4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801812F4)); - func_80028620(1, &(*(u8 *)&D_801812F4) + 0x10); - func_80028620(2, &(*(u8 *)&D_801812F4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181578[])(void); - -void func_80159968(void *a0) { - D_80181578[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801816CC[])(void); - -void func_80159B70(void *a0) { - D_801816CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801814E8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801814E8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801816D4[])(void); - -void func_8015A264(void *a0) { - D_801816D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801814F8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801814F8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181584[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u16 D_80181508[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181584[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181508)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181584[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181518 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181518; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181518); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801816DC[])(void); - -void func_8015AD3C(void *a0) { - D_801816DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8015444C.c b/src/ov_SC03_023/ov_SC03_023_jr_8015444C.c new file mode 100644 index 000000000..bb90b27a3 --- /dev/null +++ b/src/ov_SC03_023/ov_SC03_023_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181420; +extern u8 D_80181390; +extern u8 D_8018136C; +extern u8 D_80181348; +extern u8 D_801813FC; +extern u8 D_801813D8; +extern u8 D_801813B4; +extern u8 D_80181324; +extern void func_80145934(void); +extern u8 D_801814B0; +extern u8 D_8018148C; +extern u8 D_80181468; +extern u8 D_80181444; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801808A8[]; +extern unsigned char D_801808D8[]; +extern unsigned char D_80180928[]; +extern unsigned char D_80180958[]; +extern unsigned char D_80180988[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801809D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180AA0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180B28[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180B30; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80197A70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80197A74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180B60; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180C08[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180C2C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180C1C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180C40[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180C4C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180C5C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180C74[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180C64; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180C88[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180CA4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180C94; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180CB8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180CCC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180CE0; +extern void (*D_80180D08[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180CE8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180D14[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180D14[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180D54[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180D54[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180D58[])(void); + +void func_80155580(void *a0) { + D_80180D58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180F4C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180F4C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801811BC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801811BC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801811BC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801811CC[])(void); + +void func_80157544(void *a0) { + D_801811CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80197AA8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80197AA8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80197AA8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801811F4[])(void); +extern int D_80197AA8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801811F4[*(unsigned short *)((char *)param_1 + 2)](); + D_80197AA8 = D_80197AA8 - 1; + if (D_80197AA8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801811D4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801811D4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801811E4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801811E4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181234[])(void); + +void func_80157DC4(void *a0) { + D_80181234[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018123C[])(void); + +void func_80157FC4(void *a0) { + D_8018123C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181208; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181208); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80181248[])(void); + +void func_8015824C(void *a0) { + D_80181248[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80181218; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181218); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80197AB0; +extern s32 D_80197ABC; +extern s32 D_80197AC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80197AB0 = 0; + D_80197ABC = 1; + D_80197AC0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80197AB0; +extern s32 D_80197ABC; +extern s32 D_80197AC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80197AB0 = 0; + D_80197ABC = 1; + D_80197AC0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181284[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181284[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80197AB0; + +void func_80158BB0(void *arg0) { + if (D_80197AB0 == 0) { + D_80197AB0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80197ABC; +extern s32 D_80181258[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80197ABC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181258[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80197AC0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80197AC0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80197AB0; +extern s32 D_80197AB8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80197AB0 == 4) { + D_80197AB0 = 5; + } + if (D_80197AB8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801812C0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801812C0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_801594E8); + + +extern void (*D_801814D4[])(void); + +void func_80159698(void *a0) { + D_801814D4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801812F4)); + func_80028620(1, &(*(u8 *)&D_801812F4) + 0x10); + func_80028620(2, &(*(u8 *)&D_801812F4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181578[])(void); + +void func_80159968(void *a0) { + D_80181578[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801816CC[])(void); + +void func_80159B70(void *a0) { + D_801816CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801814E8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801814E8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_023/nonmatchings/ov_SC03_023_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801816D4[])(void); + +void func_8015A264(void *a0) { + D_801816D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801814F8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801814F8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_023/ov_SC03_023_jr_8015A3C8.c b/src/ov_SC03_023/ov_SC03_023_jr_8015A3C8.c new file mode 100644 index 000000000..babd5135a --- /dev/null +++ b/src/ov_SC03_023/ov_SC03_023_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181420; +extern u8 D_80181390; +extern u8 D_8018136C; +extern u8 D_80181348; +extern u8 D_801813FC; +extern u8 D_801813D8; +extern u8 D_801813B4; +extern u8 D_80181324; +extern void func_80145934(void); +extern u8 D_801814B0; +extern u8 D_8018148C; +extern u8 D_80181468; +extern u8 D_80181444; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801808A8[]; +extern unsigned char D_801808D8[]; +extern unsigned char D_80180928[]; +extern unsigned char D_80180958[]; +extern unsigned char D_80180988[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801809D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180AA0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180B28[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180B30; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80197A70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80197A74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180B60; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180C08[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180C2C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180C1C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180C40[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180C4C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180C5C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180C74[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180C64; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180C88[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180CA4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180C94; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180CB8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180CCC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180CE0; +extern void (*D_80180D08[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180CE8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180D54[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180D58[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801811BC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801811CC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80197AA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801811F4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801811D4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801811E4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181234[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018123C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181208; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181248[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181218; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80197AB0; +extern s32 D_80197ABC; +extern s32 D_80197AC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181284[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181258[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80197AB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801814D4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801812F4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181578[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801816CC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801814E8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801816D4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801814F8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181584[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80181508[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181584[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181508)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181584[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181518 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181518; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181518); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801816DC[])(void); + +void func_8015AD3C(void *a0) { + D_801816DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_024/ov_SC03_024_after.c b/src/ov_SC03_024/ov_SC03_024_after.c index 6610af393..8f45e5bb4 100644 --- a/src/ov_SC03_024/ov_SC03_024_after.c +++ b/src/ov_SC03_024/ov_SC03_024_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_024/nonmatchings/ov_SC03_024_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80188D38[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80188D38[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80188D78[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80188D78[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80188D7C[])(void); - -void func_80155580(void *a0) { - D_80188D7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80188F70[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80188F70[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801891E0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801891E0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801891E0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801891F0[])(void); - -void func_80157544(void *a0) { - D_801891F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C0040; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C0040 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C0040 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80189218[])(void); -extern int D_801C0040; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80189218[*(unsigned short *)((char *)param_1 + 2)](); - D_801C0040 = D_801C0040 - 1; - if (D_801C0040 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801891F8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801891F8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80189208; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189208); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80189258[])(void); - -void func_80157DC4(void *a0) { - D_80189258[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80189260[])(void); - -void func_80157FC4(void *a0) { - D_80189260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018922C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018922C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018926C[])(void); - -void func_8015824C(void *a0) { - D_8018926C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018923C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018923C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C0048; -extern s32 D_801C0054; -extern s32 D_801C0058; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C0048 = 0; - D_801C0054 = 1; - D_801C0058 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C0048; -extern s32 D_801C0054; -extern s32 D_801C0058; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C0048 = 0; - D_801C0054 = 1; - D_801C0058 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801892A8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801892A8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C0048; - -void func_80158BB0(void *arg0) { - if (D_801C0048 == 0) { - D_801C0048 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C0054; -extern s32 D_8018927C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C0054; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018927C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C0058; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C0058 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C0048; -extern s32 D_801C0050; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C0048 == 4) { - D_801C0048 = 5; - } - if (D_801C0050 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801892E4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801892E4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_801594E8); - - -extern void (*D_801894F8[])(void); - -void func_80159698(void *a0) { - D_801894F8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80189318)); - func_80028620(1, &(*(u8 *)&D_80189318) + 0x10); - func_80028620(2, &(*(u8 *)&D_80189318) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018959C[])(void); - -void func_80159968(void *a0) { - D_8018959C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801896F0[])(void); - -void func_80159B70(void *a0) { - D_801896F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018950C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018950C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801896F8[])(void); - -void func_8015A264(void *a0) { - D_801896F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018951C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018951C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801895A8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018952C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801895A8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018952C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801895A8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018953C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018953C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018953C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80189700[])(void); - -void func_8015AD3C(void *a0) { - D_80189700[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8015444C.c b/src/ov_SC03_024/ov_SC03_024_jr_8015444C.c new file mode 100644 index 000000000..a810b319b --- /dev/null +++ b/src/ov_SC03_024/ov_SC03_024_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189444; +extern u8 D_801893B4; +extern u8 D_80189390; +extern u8 D_8018936C; +extern u8 D_80189420; +extern u8 D_801893FC; +extern u8 D_801893D8; +extern u8 D_80189348; +extern void func_80145934(void); +extern u8 D_801894D4; +extern u8 D_801894B0; +extern u8 D_8018948C; +extern u8 D_80189468; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801888CC[]; +extern unsigned char D_801888FC[]; +extern unsigned char D_8018894C[]; +extern unsigned char D_8018897C[]; +extern unsigned char D_801889AC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801889FC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188AC4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188B4C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188B54; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C000C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188B84; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188C2C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188C50[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188C40; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188C64[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188C70[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188C80[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188C98[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188C88; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188CAC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188CC8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188CB8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188CDC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188CF0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188D04; +extern void (*D_80188D2C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188D0C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80188D38[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80188D38[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80188D78[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80188D78[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80188D7C[])(void); + +void func_80155580(void *a0) { + D_80188D7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80188F70[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80188F70[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801891E0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801891E0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801891E0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801891F0[])(void); + +void func_80157544(void *a0) { + D_801891F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C0040; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C0040 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C0040 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80189218[])(void); +extern int D_801C0040; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80189218[*(unsigned short *)((char *)param_1 + 2)](); + D_801C0040 = D_801C0040 - 1; + if (D_801C0040 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801891F8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801891F8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80189208; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189208); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80189258[])(void); + +void func_80157DC4(void *a0) { + D_80189258[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80189260[])(void); + +void func_80157FC4(void *a0) { + D_80189260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018922C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018922C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018926C[])(void); + +void func_8015824C(void *a0) { + D_8018926C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018923C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018923C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C0048; +extern s32 D_801C0054; +extern s32 D_801C0058; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C0048 = 0; + D_801C0054 = 1; + D_801C0058 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C0048; +extern s32 D_801C0054; +extern s32 D_801C0058; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C0048 = 0; + D_801C0054 = 1; + D_801C0058 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801892A8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801892A8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C0048; + +void func_80158BB0(void *arg0) { + if (D_801C0048 == 0) { + D_801C0048 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C0054; +extern s32 D_8018927C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C0054; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018927C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C0058; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C0058 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0048; +extern s32 D_801C0050; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C0048 == 4) { + D_801C0048 = 5; + } + if (D_801C0050 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801892E4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801892E4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_801594E8); + + +extern void (*D_801894F8[])(void); + +void func_80159698(void *a0) { + D_801894F8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80189318)); + func_80028620(1, &(*(u8 *)&D_80189318) + 0x10); + func_80028620(2, &(*(u8 *)&D_80189318) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018959C[])(void); + +void func_80159968(void *a0) { + D_8018959C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801896F0[])(void); + +void func_80159B70(void *a0) { + D_801896F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018950C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018950C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801896F8[])(void); + +void func_8015A264(void *a0) { + D_801896F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018951C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018951C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_024/ov_SC03_024_jr_8015A3C8.c b/src/ov_SC03_024/ov_SC03_024_jr_8015A3C8.c new file mode 100644 index 000000000..2a4fc910e --- /dev/null +++ b/src/ov_SC03_024/ov_SC03_024_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189444; +extern u8 D_801893B4; +extern u8 D_80189390; +extern u8 D_8018936C; +extern u8 D_80189420; +extern u8 D_801893FC; +extern u8 D_801893D8; +extern u8 D_80189348; +extern void func_80145934(void); +extern u8 D_801894D4; +extern u8 D_801894B0; +extern u8 D_8018948C; +extern u8 D_80189468; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801888CC[]; +extern unsigned char D_801888FC[]; +extern unsigned char D_8018894C[]; +extern unsigned char D_8018897C[]; +extern unsigned char D_801889AC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801889FC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80188AC4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188B4C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188B54; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0008; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C000C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188B84; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188C2C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188C50[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188C40; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188C64[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188C70[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188C80[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188C98[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188C88; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188CAC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80188CC8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188CB8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188CDC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188CF0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80188D04; +extern void (*D_80188D2C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188D0C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80188D78[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188D7C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801891E0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801891F0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C0040; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189218[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801891F8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189208; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189258[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189260[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018922C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018926C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018923C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C0048; +extern s32 D_801C0054; +extern s32 D_801C0058; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801892A8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018927C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0050; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801894F8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189318[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018959C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801896F0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018950C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801896F8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018951C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801895A8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018952C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801895A8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018952C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801895A8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018953C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018953C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018953C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80189700[])(void); + +void func_8015AD3C(void *a0) { + D_80189700[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_028/ov_SC03_028_after.c b/src/ov_SC03_028/ov_SC03_028_after.c index b7c0c701b..5b2e5b3f2 100644 --- a/src/ov_SC03_028/ov_SC03_028_after.c +++ b/src/ov_SC03_028/ov_SC03_028_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_028/nonmatchings/ov_SC03_028_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D804[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D804[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D844[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D844[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D848[])(void); - -void func_80155580(void *a0) { - D_8018D848[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018DA3C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018DA3C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018DCAC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018DCAC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018DCAC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018DCBC[])(void); - -void func_80157544(void *a0) { - D_8018DCBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EA378; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EA378 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EA378 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018DCE4[])(void); -extern int D_801EA378; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018DCE4[*(unsigned short *)((char *)param_1 + 2)](); - D_801EA378 = D_801EA378 - 1; - if (D_801EA378 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018DCC4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018DCC4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018DCD4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018DCD4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018DD24[])(void); - -void func_80157DC4(void *a0) { - D_8018DD24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018DD2C[])(void); - -void func_80157FC4(void *a0) { - D_8018DD2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018DCF8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018DCF8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018DD38[])(void); - -void func_8015824C(void *a0) { - D_8018DD38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018DD08; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018DD08); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EA380; -extern s32 D_801EA38C; -extern s32 D_801EA390; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EA380 = 0; - D_801EA38C = 1; - D_801EA390 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EA380; -extern s32 D_801EA38C; -extern s32 D_801EA390; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EA380 = 0; - D_801EA38C = 1; - D_801EA390 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018DD74[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018DD74[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EA380; - -void func_80158BB0(void *arg0) { - if (D_801EA380 == 0) { - D_801EA380 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EA38C; -extern s32 D_8018DD48[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EA38C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018DD48[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EA390; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EA390 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EA380; -extern s32 D_801EA388; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EA380 == 4) { - D_801EA380 = 5; - } - if (D_801EA388 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018DDB0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018DDB0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_801594E8); - - -extern void (*D_8018DFC4[])(void); - -void func_80159698(void *a0) { - D_8018DFC4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018DDE4)); - func_80028620(1, &(*(u8 *)&D_8018DDE4) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018DDE4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018E068[])(void); - -void func_80159968(void *a0) { - D_8018E068[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018E1BC[])(void); - -void func_80159B70(void *a0) { - D_8018E1BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018DFD8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DFD8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018E1C4[])(void); - -void func_8015A264(void *a0) { - D_8018E1C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018DFE8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DFE8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018E074[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018DFF8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018E074[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DFF8); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018E074[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018E008 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018E008; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018E008); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018E1CC[])(void); - -void func_8015AD3C(void *a0) { - D_8018E1CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8015444C.c b/src/ov_SC03_028/ov_SC03_028_jr_8015444C.c new file mode 100644 index 000000000..9d779b71d --- /dev/null +++ b/src/ov_SC03_028/ov_SC03_028_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DF10; +extern u8 D_8018DE80; +extern u8 D_8018DE5C; +extern u8 D_8018DE38; +extern u8 D_8018DEEC; +extern u8 D_8018DEC8; +extern u8 D_8018DEA4; +extern u8 D_8018DE14; +extern void func_80145934(void); +extern u8 D_8018DFA0; +extern u8 D_8018DF7C; +extern u8 D_8018DF58; +extern u8 D_8018DF34; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D398[]; +extern unsigned char D_8018D3C8[]; +extern unsigned char D_8018D418[]; +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D4C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D590[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D618[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D620; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D650; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D6F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D71C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D70C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D730[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D73C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D74C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D764[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D754; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D778[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D794[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D784; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D7A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D7BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D7D0; +extern void (*D_8018D7F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D7D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D804[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D804[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D844[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D844[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D848[])(void); + +void func_80155580(void *a0) { + D_8018D848[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018DA3C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018DA3C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018DCAC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DCAC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018DCAC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018DCBC[])(void); + +void func_80157544(void *a0) { + D_8018DCBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EA378; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EA378 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EA378 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018DCE4[])(void); +extern int D_801EA378; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018DCE4[*(unsigned short *)((char *)param_1 + 2)](); + D_801EA378 = D_801EA378 - 1; + if (D_801EA378 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DCC4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018DCC4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018DCD4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018DCD4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018DD24[])(void); + +void func_80157DC4(void *a0) { + D_8018DD24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018DD2C[])(void); + +void func_80157FC4(void *a0) { + D_8018DD2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018DCF8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018DCF8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018DD38[])(void); + +void func_8015824C(void *a0) { + D_8018DD38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018DD08; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018DD08); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EA380; +extern s32 D_801EA38C; +extern s32 D_801EA390; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EA380 = 0; + D_801EA38C = 1; + D_801EA390 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EA380; +extern s32 D_801EA38C; +extern s32 D_801EA390; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EA380 = 0; + D_801EA38C = 1; + D_801EA390 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018DD74[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018DD74[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EA380; + +void func_80158BB0(void *arg0) { + if (D_801EA380 == 0) { + D_801EA380 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EA38C; +extern s32 D_8018DD48[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EA38C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018DD48[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EA390; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EA390 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA380; +extern s32 D_801EA388; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EA380 == 4) { + D_801EA380 = 5; + } + if (D_801EA388 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018DDB0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018DDB0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_801594E8); + + +extern void (*D_8018DFC4[])(void); + +void func_80159698(void *a0) { + D_8018DFC4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018DDE4)); + func_80028620(1, &(*(u8 *)&D_8018DDE4) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018DDE4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018E068[])(void); + +void func_80159968(void *a0) { + D_8018E068[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018E1BC[])(void); + +void func_80159B70(void *a0) { + D_8018E1BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018DFD8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018DFD8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018E1C4[])(void); + +void func_8015A264(void *a0) { + D_8018E1C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018DFE8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018DFE8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_028/ov_SC03_028_jr_8015A3C8.c b/src/ov_SC03_028/ov_SC03_028_jr_8015A3C8.c new file mode 100644 index 000000000..d85d62f95 --- /dev/null +++ b/src/ov_SC03_028/ov_SC03_028_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DF10; +extern u8 D_8018DE80; +extern u8 D_8018DE5C; +extern u8 D_8018DE38; +extern u8 D_8018DEEC; +extern u8 D_8018DEC8; +extern u8 D_8018DEA4; +extern u8 D_8018DE14; +extern void func_80145934(void); +extern u8 D_8018DFA0; +extern u8 D_8018DF7C; +extern u8 D_8018DF58; +extern u8 D_8018DF34; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D398[]; +extern unsigned char D_8018D3C8[]; +extern unsigned char D_8018D418[]; +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D4C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D590[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D618[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D620; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EA340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EA344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D650; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D6F8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D71C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D70C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D730[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D73C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D74C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D764[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D754; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D778[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D794[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D784; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D7A8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D7BC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D7D0; +extern void (*D_8018D7F8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D7D8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D844[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D848[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DCAC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018DCBC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EA378; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018DCE4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DCC4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018DCD4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018DD24[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018DD2C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018DCF8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018DD38[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018DD08; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EA380; +extern s32 D_801EA38C; +extern s32 D_801EA390; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018DD74[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018DD48[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EA388; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018DFC4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018DDE4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018E068[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018E1BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018DFD8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018E1C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018DFE8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018E074[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018DFF8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018E074[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018DFF8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018E074[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018E008 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018E008; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018E008); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018E1CC[])(void); + +void func_8015AD3C(void *a0) { + D_8018E1CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_029/ov_SC03_029_after.c b/src/ov_SC03_029/ov_SC03_029_after.c index 6ef9058f1..18f4c57e4 100644 --- a/src/ov_SC03_029/ov_SC03_029_after.c +++ b/src/ov_SC03_029/ov_SC03_029_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_029/nonmatchings/ov_SC03_029_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018963C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018963C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018967C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018967C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80189680[])(void); - -void func_80155580(void *a0) { - D_80189680[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80189874[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80189874[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189AE4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80189AE4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80189AE4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80189AF4[])(void); - -void func_80157544(void *a0) { - D_80189AF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D8350; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D8350 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D8350 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80189B1C[])(void); -extern int D_801D8350; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80189B1C[*(unsigned short *)((char *)param_1 + 2)](); - D_801D8350 = D_801D8350 - 1; - if (D_801D8350 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80189AFC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189AFC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80189B0C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189B0C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80189B5C[])(void); - -void func_80157DC4(void *a0) { - D_80189B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80189B64[])(void); - -void func_80157FC4(void *a0) { - D_80189B64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80189B30; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80189B30); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80189B70[])(void); - -void func_8015824C(void *a0) { - D_80189B70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80189B40; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189B40); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D8358; -extern s32 D_801D8364; -extern s32 D_801D8368; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D8358 = 0; - D_801D8364 = 1; - D_801D8368 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D8358; -extern s32 D_801D8364; -extern s32 D_801D8368; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D8358 = 0; - D_801D8364 = 1; - D_801D8368 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80189BAC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80189BAC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D8358; - -void func_80158BB0(void *arg0) { - if (D_801D8358 == 0) { - D_801D8358 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D8364; -extern s32 D_80189B80[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D8364; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189B80[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D8368; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D8368 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D8358; -extern s32 D_801D8360; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D8358 == 4) { - D_801D8358 = 5; - } - if (D_801D8360 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80189BE8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80189BE8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_801594E8); - - -extern void (*D_80189DFC[])(void); - -void func_80159698(void *a0) { - D_80189DFC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80189C1C)); - func_80028620(1, &(*(u8 *)&D_80189C1C) + 0x10); - func_80028620(2, &(*(u8 *)&D_80189C1C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80189EA0[])(void); - -void func_80159968(void *a0) { - D_80189EA0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80189FF4[])(void); - -void func_80159B70(void *a0) { - D_80189FF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80189E10; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80189E10); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80189FFC[])(void); - -void func_8015A264(void *a0) { - D_80189FFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80189E20; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189E20); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80189EAC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80189E30; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80189EAC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80189E30)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80189EAC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189E40 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80189E40; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80189E40); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018A004[])(void); - -void func_8015AD3C(void *a0) { - D_8018A004[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8015444C.c b/src/ov_SC03_029/ov_SC03_029_jr_8015444C.c new file mode 100644 index 000000000..6b381334d --- /dev/null +++ b/src/ov_SC03_029/ov_SC03_029_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189D48; +extern u8 D_80189CB8; +extern u8 D_80189C94; +extern u8 D_80189C70; +extern u8 D_80189D24; +extern u8 D_80189D00; +extern u8 D_80189CDC; +extern u8 D_80189C4C; +extern void func_80145934(void); +extern u8 D_80189DD8; +extern u8 D_80189DB4; +extern u8 D_80189D90; +extern u8 D_80189D6C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801891D0[]; +extern unsigned char D_80189200[]; +extern unsigned char D_80189250[]; +extern unsigned char D_80189280[]; +extern unsigned char D_801892B0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189300[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801893C8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189450[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189458; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8318; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D831C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189488; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189530[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189554[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189544; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189568[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189574[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189584[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018959C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018958C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801895B0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801895CC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801895BC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801895E0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801895F4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80189608; +extern void (*D_80189630[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80189610; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018963C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018963C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018967C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018967C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80189680[])(void); + +void func_80155580(void *a0) { + D_80189680[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80189874[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80189874[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189AE4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80189AE4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80189AE4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80189AF4[])(void); + +void func_80157544(void *a0) { + D_80189AF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D8350; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D8350 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D8350 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80189B1C[])(void); +extern int D_801D8350; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80189B1C[*(unsigned short *)((char *)param_1 + 2)](); + D_801D8350 = D_801D8350 - 1; + if (D_801D8350 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189AFC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189AFC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80189B0C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189B0C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80189B5C[])(void); + +void func_80157DC4(void *a0) { + D_80189B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80189B64[])(void); + +void func_80157FC4(void *a0) { + D_80189B64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80189B30; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80189B30); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80189B70[])(void); + +void func_8015824C(void *a0) { + D_80189B70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80189B40; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189B40); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D8358; +extern s32 D_801D8364; +extern s32 D_801D8368; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D8358 = 0; + D_801D8364 = 1; + D_801D8368 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D8358; +extern s32 D_801D8364; +extern s32 D_801D8368; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D8358 = 0; + D_801D8364 = 1; + D_801D8368 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80189BAC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80189BAC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D8358; + +void func_80158BB0(void *arg0) { + if (D_801D8358 == 0) { + D_801D8358 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D8364; +extern s32 D_80189B80[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D8364; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189B80[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D8368; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D8368 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8358; +extern s32 D_801D8360; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D8358 == 4) { + D_801D8358 = 5; + } + if (D_801D8360 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80189BE8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80189BE8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_801594E8); + + +extern void (*D_80189DFC[])(void); + +void func_80159698(void *a0) { + D_80189DFC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80189C1C)); + func_80028620(1, &(*(u8 *)&D_80189C1C) + 0x10); + func_80028620(2, &(*(u8 *)&D_80189C1C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80189EA0[])(void); + +void func_80159968(void *a0) { + D_80189EA0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80189FF4[])(void); + +void func_80159B70(void *a0) { + D_80189FF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80189E10; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80189E10); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80189FFC[])(void); + +void func_8015A264(void *a0) { + D_80189FFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80189E20; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189E20); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_029/ov_SC03_029_jr_8015A3C8.c b/src/ov_SC03_029/ov_SC03_029_jr_8015A3C8.c new file mode 100644 index 000000000..0b121ee61 --- /dev/null +++ b/src/ov_SC03_029/ov_SC03_029_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189D48; +extern u8 D_80189CB8; +extern u8 D_80189C94; +extern u8 D_80189C70; +extern u8 D_80189D24; +extern u8 D_80189D00; +extern u8 D_80189CDC; +extern u8 D_80189C4C; +extern void func_80145934(void); +extern u8 D_80189DD8; +extern u8 D_80189DB4; +extern u8 D_80189D90; +extern u8 D_80189D6C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801891D0[]; +extern unsigned char D_80189200[]; +extern unsigned char D_80189250[]; +extern unsigned char D_80189280[]; +extern unsigned char D_801892B0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189300[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801893C8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189450[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189458; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D8318; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D831C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189488; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189530[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189554[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189544; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189568[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189574[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189584[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018959C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018958C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801895B0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801895CC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801895BC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801895E0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801895F4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80189608; +extern void (*D_80189630[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80189610; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018967C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189680[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189AE4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189AF4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D8350; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189B1C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189AFC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189B0C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189B5C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189B64[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189B30; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189B70[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189B40; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D8358; +extern s32 D_801D8364; +extern s32 D_801D8368; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189BAC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189B80[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D8360; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80189DFC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189C1C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189EA0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189FF4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80189E10; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189FFC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189E20; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189EAC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80189E30; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189EAC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80189E30)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189EAC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189E40 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189E40; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80189E40); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018A004[])(void); + +void func_8015AD3C(void *a0) { + D_8018A004[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_030/ov_SC03_030_after.c b/src/ov_SC03_030/ov_SC03_030_after.c index 3f639ea0b..9e872b0cc 100644 --- a/src/ov_SC03_030/ov_SC03_030_after.c +++ b/src/ov_SC03_030/ov_SC03_030_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_030/nonmatchings/ov_SC03_030_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183C78[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183C78[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183CB8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183CB8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183CBC[])(void); - -void func_80155580(void *a0) { - D_80183CBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80183EB0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80183EB0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184120 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184120[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184120[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184130[])(void); - -void func_80157544(void *a0) { - D_80184130[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E0948; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E0948 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E0948 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184158[])(void); -extern int D_801E0948; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184158[*(unsigned short *)((char *)param_1 + 2)](); - D_801E0948 = D_801E0948 - 1; - if (D_801E0948 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184138; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184138); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184148; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184148); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80184198[])(void); - -void func_80157DC4(void *a0) { - D_80184198[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801841A0[])(void); - -void func_80157FC4(void *a0) { - D_801841A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018416C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018416C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801841AC[])(void); - -void func_8015824C(void *a0) { - D_801841AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018417C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018417C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E0950; -extern s32 D_801E095C; -extern s32 D_801E0960; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E0950 = 0; - D_801E095C = 1; - D_801E0960 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E0950; -extern s32 D_801E095C; -extern s32 D_801E0960; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E0950 = 0; - D_801E095C = 1; - D_801E0960 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801841E8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801841E8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E0950; - -void func_80158BB0(void *arg0) { - if (D_801E0950 == 0) { - D_801E0950 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E095C; -extern s32 D_801841BC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E095C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801841BC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E0960; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E0960 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E0950; -extern s32 D_801E0958; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E0950 == 4) { - D_801E0950 = 5; - } - if (D_801E0958 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184224[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184224; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_801594E8); - - -extern void (*D_80184438[])(void); - -void func_80159698(void *a0) { - D_80184438[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184258)); - func_80028620(1, &(*(u8 *)&D_80184258) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184258) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801844DC[])(void); - -void func_80159968(void *a0) { - D_801844DC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184630[])(void); - -void func_80159B70(void *a0) { - D_80184630[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018444C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018444C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184638[])(void); - -void func_8015A264(void *a0) { - D_80184638[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018445C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018445C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801844E8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018446C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801844E8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018446C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801844E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018447C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018447C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018447C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184640[])(void); - -void func_8015AD3C(void *a0) { - D_80184640[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8015444C.c b/src/ov_SC03_030/ov_SC03_030_jr_8015444C.c new file mode 100644 index 000000000..6d2f55083 --- /dev/null +++ b/src/ov_SC03_030/ov_SC03_030_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184384; +extern u8 D_801842F4; +extern u8 D_801842D0; +extern u8 D_801842AC; +extern u8 D_80184360; +extern u8 D_8018433C; +extern u8 D_80184318; +extern u8 D_80184288; +extern void func_80145934(void); +extern u8 D_80184414; +extern u8 D_801843F0; +extern u8 D_801843CC; +extern u8 D_801843A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018380C[]; +extern unsigned char D_8018383C[]; +extern unsigned char D_8018388C[]; +extern unsigned char D_801838BC[]; +extern unsigned char D_801838EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018393C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183A94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0910; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0914; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B6C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B90[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B80; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BA4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BB0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BC0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BD8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BC8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BEC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C08[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183BF8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C1C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C30[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C44; +extern void (*D_80183C6C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C4C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183C78[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183C78[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183CB8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183CB8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183CBC[])(void); + +void func_80155580(void *a0) { + D_80183CBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80183EB0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80183EB0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184120 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184120[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184120[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184130[])(void); + +void func_80157544(void *a0) { + D_80184130[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E0948; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E0948 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E0948 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184158[])(void); +extern int D_801E0948; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184158[*(unsigned short *)((char *)param_1 + 2)](); + D_801E0948 = D_801E0948 - 1; + if (D_801E0948 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184138; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184138); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184148; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184148); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80184198[])(void); + +void func_80157DC4(void *a0) { + D_80184198[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801841A0[])(void); + +void func_80157FC4(void *a0) { + D_801841A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018416C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018416C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801841AC[])(void); + +void func_8015824C(void *a0) { + D_801841AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018417C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018417C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E0950; +extern s32 D_801E095C; +extern s32 D_801E0960; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E0950 = 0; + D_801E095C = 1; + D_801E0960 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E0950; +extern s32 D_801E095C; +extern s32 D_801E0960; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E0950 = 0; + D_801E095C = 1; + D_801E0960 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801841E8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801841E8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E0950; + +void func_80158BB0(void *arg0) { + if (D_801E0950 == 0) { + D_801E0950 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E095C; +extern s32 D_801841BC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E095C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801841BC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E0960; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E0960 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0950; +extern s32 D_801E0958; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E0950 == 4) { + D_801E0950 = 5; + } + if (D_801E0958 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184224[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184224; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_801594E8); + + +extern void (*D_80184438[])(void); + +void func_80159698(void *a0) { + D_80184438[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184258)); + func_80028620(1, &(*(u8 *)&D_80184258) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184258) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801844DC[])(void); + +void func_80159968(void *a0) { + D_801844DC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184630[])(void); + +void func_80159B70(void *a0) { + D_80184630[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018444C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018444C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184638[])(void); + +void func_8015A264(void *a0) { + D_80184638[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018445C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018445C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8015A3C8.c b/src/ov_SC03_030/ov_SC03_030_jr_8015A3C8.c new file mode 100644 index 000000000..98f3376e4 --- /dev/null +++ b/src/ov_SC03_030/ov_SC03_030_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184384; +extern u8 D_801842F4; +extern u8 D_801842D0; +extern u8 D_801842AC; +extern u8 D_80184360; +extern u8 D_8018433C; +extern u8 D_80184318; +extern u8 D_80184288; +extern void func_80145934(void); +extern u8 D_80184414; +extern u8 D_801843F0; +extern u8 D_801843CC; +extern u8 D_801843A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018380C[]; +extern unsigned char D_8018383C[]; +extern unsigned char D_8018388C[]; +extern unsigned char D_801838BC[]; +extern unsigned char D_801838EC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018393C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183A94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0910; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0914; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B6C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B90[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B80; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BA4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BB0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BC0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BD8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BC8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BEC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C08[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183BF8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C1C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C30[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C44; +extern void (*D_80183C6C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C4C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183CB8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183CBC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184120[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184130[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0948; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184158[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184138; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184148; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184198[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801841A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018416C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801841AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018417C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0950; +extern s32 D_801E095C; +extern s32 D_801E0960; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801841E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801841BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0958; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184438[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184258[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801844DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184630[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018444C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184638[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018445C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801844E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018446C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801844E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018446C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801844E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018447C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018447C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018447C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184640[])(void); + +void func_8015AD3C(void *a0) { + D_80184640[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_031/ov_SC03_031_after.c b/src/ov_SC03_031/ov_SC03_031_after.c index 8ee9b2ea6..7f9396e9d 100644 --- a/src/ov_SC03_031/ov_SC03_031_after.c +++ b/src/ov_SC03_031/ov_SC03_031_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_031/nonmatchings/ov_SC03_031_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80184194[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80184194[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801841D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801841D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801841D8[])(void); - -void func_80155580(void *a0) { - D_801841D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801843CC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801843CC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018463C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018463C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018463C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018464C[])(void); - -void func_80157544(void *a0) { - D_8018464C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C4D48; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C4D48 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C4D48 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184674[])(void); -extern int D_801C4D48; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184674[*(unsigned short *)((char *)param_1 + 2)](); - D_801C4D48 = D_801C4D48 - 1; - if (D_801C4D48 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184654; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184654); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184664; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184664); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801846B4[])(void); - -void func_80157DC4(void *a0) { - D_801846B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801846BC[])(void); - -void func_80157FC4(void *a0) { - D_801846BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184688; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184688); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801846C8[])(void); - -void func_8015824C(void *a0) { - D_801846C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184698; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184698); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C4D50; -extern s32 D_801C4D5C; -extern s32 D_801C4D60; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C4D50 = 0; - D_801C4D5C = 1; - D_801C4D60 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C4D50; -extern s32 D_801C4D5C; -extern s32 D_801C4D60; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C4D50 = 0; - D_801C4D5C = 1; - D_801C4D60 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184704[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184704[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C4D50; - -void func_80158BB0(void *arg0) { - if (D_801C4D50 == 0) { - D_801C4D50 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C4D5C; -extern s32 D_801846D8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C4D5C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801846D8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C4D60; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C4D60 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C4D50; -extern s32 D_801C4D58; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C4D50 == 4) { - D_801C4D50 = 5; - } - if (D_801C4D58 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184740[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184740; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_801594E8); - - -extern void (*D_80184954[])(void); - -void func_80159698(void *a0) { - D_80184954[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184774)); - func_80028620(1, &(*(u8 *)&D_80184774) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184774) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801849F8[])(void); - -void func_80159968(void *a0) { - D_801849F8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184B4C[])(void); - -void func_80159B70(void *a0) { - D_80184B4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184968; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184968); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184B54[])(void); - -void func_8015A264(void *a0) { - D_80184B54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184978; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184978); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184A04[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80184988; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184A04[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184988); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184A04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184998 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184998; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184998); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184B5C[])(void); - -void func_8015AD3C(void *a0) { - D_80184B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8015444C.c b/src/ov_SC03_031/ov_SC03_031_jr_8015444C.c new file mode 100644 index 000000000..99fb81fe2 --- /dev/null +++ b/src/ov_SC03_031/ov_SC03_031_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848A0; +extern u8 D_80184810; +extern u8 D_801847EC; +extern u8 D_801847C8; +extern u8 D_8018487C; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_801847A4; +extern void func_80145934(void); +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D28[]; +extern unsigned char D_80183D58[]; +extern unsigned char D_80183DA8[]; +extern unsigned char D_80183DD8[]; +extern unsigned char D_80183E08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183E58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4D10; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4D14; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183FE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184088[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018409C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801840C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801840CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801840DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801840F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801840E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184124[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184114; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184138[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018414C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184160; +extern void (*D_80184188[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184168; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80184194[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80184194[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801841D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801841D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801841D8[])(void); + +void func_80155580(void *a0) { + D_801841D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801843CC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801843CC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018463C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018463C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018463C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018464C[])(void); + +void func_80157544(void *a0) { + D_8018464C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C4D48; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C4D48 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C4D48 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184674[])(void); +extern int D_801C4D48; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184674[*(unsigned short *)((char *)param_1 + 2)](); + D_801C4D48 = D_801C4D48 - 1; + if (D_801C4D48 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184654; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184654); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184664; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184664); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801846B4[])(void); + +void func_80157DC4(void *a0) { + D_801846B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801846BC[])(void); + +void func_80157FC4(void *a0) { + D_801846BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184688; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184688); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801846C8[])(void); + +void func_8015824C(void *a0) { + D_801846C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184698; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184698); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C4D50; +extern s32 D_801C4D5C; +extern s32 D_801C4D60; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C4D50 = 0; + D_801C4D5C = 1; + D_801C4D60 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C4D50; +extern s32 D_801C4D5C; +extern s32 D_801C4D60; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C4D50 = 0; + D_801C4D5C = 1; + D_801C4D60 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184704[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184704[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C4D50; + +void func_80158BB0(void *arg0) { + if (D_801C4D50 == 0) { + D_801C4D50 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C4D5C; +extern s32 D_801846D8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C4D5C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801846D8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C4D60; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C4D60 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4D50; +extern s32 D_801C4D58; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C4D50 == 4) { + D_801C4D50 = 5; + } + if (D_801C4D58 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184740[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184740; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_801594E8); + + +extern void (*D_80184954[])(void); + +void func_80159698(void *a0) { + D_80184954[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184774)); + func_80028620(1, &(*(u8 *)&D_80184774) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184774) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801849F8[])(void); + +void func_80159968(void *a0) { + D_801849F8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184B4C[])(void); + +void func_80159B70(void *a0) { + D_80184B4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184968; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184968); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_031/nonmatchings/ov_SC03_031_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184B54[])(void); + +void func_8015A264(void *a0) { + D_80184B54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184978; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184978); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_031/ov_SC03_031_jr_8015A3C8.c b/src/ov_SC03_031/ov_SC03_031_jr_8015A3C8.c new file mode 100644 index 000000000..d831220e5 --- /dev/null +++ b/src/ov_SC03_031/ov_SC03_031_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801848A0; +extern u8 D_80184810; +extern u8 D_801847EC; +extern u8 D_801847C8; +extern u8 D_8018487C; +extern u8 D_80184858; +extern u8 D_80184834; +extern u8 D_801847A4; +extern void func_80145934(void); +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183D28[]; +extern unsigned char D_80183D58[]; +extern unsigned char D_80183DA8[]; +extern unsigned char D_80183DD8[]; +extern unsigned char D_80183E08[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183E58[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183F20[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183FA8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183FB0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4D10; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4D14; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183FE0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184088[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801840AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018409C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801840C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801840CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801840DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801840F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801840E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184108[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184124[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184114; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184138[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018414C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184160; +extern void (*D_80184188[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184168; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801841D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801841D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018463C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018464C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C4D48; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184674[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184654; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184664; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801846B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801846BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184688; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801846C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184698; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C4D50; +extern s32 D_801C4D5C; +extern s32 D_801C4D60; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184704[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801846D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4D58; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184954[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184774[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801849F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184B4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184968; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184B54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184978; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184A04[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80184988; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184A04[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184988); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184A04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184998 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184998; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184998); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184B5C[])(void); + +void func_8015AD3C(void *a0) { + D_80184B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_089/ov_SC03_089_after.c b/src/ov_SC03_089/ov_SC03_089_after.c index 4ff24f5bc..6e971b508 100644 --- a/src/ov_SC03_089/ov_SC03_089_after.c +++ b/src/ov_SC03_089/ov_SC03_089_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_089/nonmatchings/ov_SC03_089_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018B490[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018B490[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018B4D0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018B4D0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018B4D4[])(void); - -void func_80155580(void *a0) { - D_8018B4D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018B6C8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018B6C8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018B938 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018B938[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018B938[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018B948[])(void); - -void func_80157544(void *a0) { - D_8018B948[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C5600; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C5600 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C5600 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018B970[])(void); -extern int D_801C5600; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018B970[*(unsigned short *)((char *)param_1 + 2)](); - D_801C5600 = D_801C5600 - 1; - if (D_801C5600 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018B950; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018B950); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018B960; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018B960); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018B9B0[])(void); - -void func_80157DC4(void *a0) { - D_8018B9B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018B9B8[])(void); - -void func_80157FC4(void *a0) { - D_8018B9B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018B984; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018B984); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018B9C4[])(void); - -void func_8015824C(void *a0) { - D_8018B9C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018B994; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018B994); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C5608; -extern s32 D_801C5614; -extern s32 D_801C5618; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C5608 = 0; - D_801C5614 = 1; - D_801C5618 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C5608; -extern s32 D_801C5614; -extern s32 D_801C5618; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C5608 = 0; - D_801C5614 = 1; - D_801C5618 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018BA00[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018BA00[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C5608; - -void func_80158BB0(void *arg0) { - if (D_801C5608 == 0) { - D_801C5608 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C5614; -extern s32 D_8018B9D4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C5614; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018B9D4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C5618; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C5618 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C5608; -extern s32 D_801C5610; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C5608 == 4) { - D_801C5608 = 5; - } - if (D_801C5610 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018BA3C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018BA3C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_801594E8); - - -extern void (*D_8018BC50[])(void); - -void func_80159698(void *a0) { - D_8018BC50[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018BA70)); - func_80028620(1, &(*(u8 *)&D_8018BA70) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018BA70) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018BCF4[])(void); - -void func_80159968(void *a0) { - D_8018BCF4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018BE48[])(void); - -void func_80159B70(void *a0) { - D_8018BE48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018BC64; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BC64); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018BE50[])(void); - -void func_8015A264(void *a0) { - D_8018BE50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018BC74; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BC74); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018BD00[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern char *D_8018BC84; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018BD00[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BC84)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018BD00[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BC94 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018BC94; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018BC94); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018BE58[])(void); - -void func_8015AD3C(void *a0) { - D_8018BE58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8015444C.c b/src/ov_SC03_089/ov_SC03_089_jr_8015444C.c new file mode 100644 index 000000000..50ae9ecdb --- /dev/null +++ b/src/ov_SC03_089/ov_SC03_089_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BB9C; +extern u8 D_8018BB0C; +extern u8 D_8018BAE8; +extern u8 D_8018BAC4; +extern u8 D_8018BB78; +extern u8 D_8018BB54; +extern u8 D_8018BB30; +extern u8 D_8018BAA0; +extern void func_80145934(void); +extern u8 D_8018BC2C; +extern u8 D_8018BC08; +extern u8 D_8018BBE4; +extern u8 D_8018BBC0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B024[]; +extern unsigned char D_8018B054[]; +extern unsigned char D_8018B0A4[]; +extern unsigned char D_8018B0D4[]; +extern unsigned char D_8018B104[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B154[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B21C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B2A4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B2AC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C55C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C55CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B2DC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B384[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B3A8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B398; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B3BC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B3C8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B3D8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B3F0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B3E0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B404[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B420[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B410; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B434[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B448[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B45C; +extern void (*D_8018B484[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B464; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018B490[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018B490[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018B4D0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018B4D0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018B4D4[])(void); + +void func_80155580(void *a0) { + D_8018B4D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018B6C8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018B6C8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018B938 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018B938[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018B938[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018B948[])(void); + +void func_80157544(void *a0) { + D_8018B948[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C5600; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C5600 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C5600 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018B970[])(void); +extern int D_801C5600; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018B970[*(unsigned short *)((char *)param_1 + 2)](); + D_801C5600 = D_801C5600 - 1; + if (D_801C5600 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018B950; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018B950); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018B960; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018B960); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018B9B0[])(void); + +void func_80157DC4(void *a0) { + D_8018B9B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018B9B8[])(void); + +void func_80157FC4(void *a0) { + D_8018B9B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018B984; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018B984); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018B9C4[])(void); + +void func_8015824C(void *a0) { + D_8018B9C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018B994; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018B994); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C5608; +extern s32 D_801C5614; +extern s32 D_801C5618; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C5608 = 0; + D_801C5614 = 1; + D_801C5618 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C5608; +extern s32 D_801C5614; +extern s32 D_801C5618; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C5608 = 0; + D_801C5614 = 1; + D_801C5618 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018BA00[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018BA00[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C5608; + +void func_80158BB0(void *arg0) { + if (D_801C5608 == 0) { + D_801C5608 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C5614; +extern s32 D_8018B9D4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C5614; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018B9D4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C5618; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C5618 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5608; +extern s32 D_801C5610; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C5608 == 4) { + D_801C5608 = 5; + } + if (D_801C5610 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018BA3C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018BA3C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_801594E8); + + +extern void (*D_8018BC50[])(void); + +void func_80159698(void *a0) { + D_8018BC50[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018BA70)); + func_80028620(1, &(*(u8 *)&D_8018BA70) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018BA70) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018BCF4[])(void); + +void func_80159968(void *a0) { + D_8018BCF4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018BE48[])(void); + +void func_80159B70(void *a0) { + D_8018BE48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018BC64; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BC64); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_089/nonmatchings/ov_SC03_089_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018BE50[])(void); + +void func_8015A264(void *a0) { + D_8018BE50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018BC74; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BC74); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_089/ov_SC03_089_jr_8015A3C8.c b/src/ov_SC03_089/ov_SC03_089_jr_8015A3C8.c new file mode 100644 index 000000000..dcf97377a --- /dev/null +++ b/src/ov_SC03_089/ov_SC03_089_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BB9C; +extern u8 D_8018BB0C; +extern u8 D_8018BAE8; +extern u8 D_8018BAC4; +extern u8 D_8018BB78; +extern u8 D_8018BB54; +extern u8 D_8018BB30; +extern u8 D_8018BAA0; +extern void func_80145934(void); +extern u8 D_8018BC2C; +extern u8 D_8018BC08; +extern u8 D_8018BBE4; +extern u8 D_8018BBC0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B024[]; +extern unsigned char D_8018B054[]; +extern unsigned char D_8018B0A4[]; +extern unsigned char D_8018B0D4[]; +extern unsigned char D_8018B104[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B154[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B21C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B2A4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B2AC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C55C8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C55CC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B2DC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B384[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B3A8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B398; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B3BC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B3C8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B3D8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B3F0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B3E0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B404[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B420[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B410; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B434[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B448[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B45C; +extern void (*D_8018B484[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B464; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B4D0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B4D4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018B938[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018B948[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C5600; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018B970[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018B950; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018B960; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018B9B0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018B9B8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018B984; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018B9C4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018B994; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C5608; +extern s32 D_801C5614; +extern s32 D_801C5618; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BA00[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018B9D4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5610; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BC50[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BA70[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BCF4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018BE48[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BC64; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018BE50[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BC74; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018BD00[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char *D_8018BC84; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018BD00[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BC84)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018BD00[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BC94 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BC94; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018BC94); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018BE58[])(void); + +void func_8015AD3C(void *a0) { + D_8018BE58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_090/ov_SC03_090_after.c b/src/ov_SC03_090/ov_SC03_090_after.c index 212ab7823..a1e7662d0 100644 --- a/src/ov_SC03_090/ov_SC03_090_after.c +++ b/src/ov_SC03_090/ov_SC03_090_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_090/nonmatchings/ov_SC03_090_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018D8B4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018D8B4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018D8F4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018D8F4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018D8F8[])(void); - -void func_80155580(void *a0) { - D_8018D8F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018DAEC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018DAEC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018DD5C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018DD5C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018DD5C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018DD6C[])(void); - -void func_80157544(void *a0) { - D_8018DD6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CAA68; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CAA68 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CAA68 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018DD94[])(void); -extern int D_801CAA68; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018DD94[*(unsigned short *)((char *)param_1 + 2)](); - D_801CAA68 = D_801CAA68 - 1; - if (D_801CAA68 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018DD74; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018DD74); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018DD84; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018DD84); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018DDD4[])(void); - -void func_80157DC4(void *a0) { - D_8018DDD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018DDDC[])(void); - -void func_80157FC4(void *a0) { - D_8018DDDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018DDA8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018DDA8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018DDE8[])(void); - -void func_8015824C(void *a0) { - D_8018DDE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018DDB8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018DDB8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CAA70; -extern s32 D_801CAA7C; -extern s32 D_801CAA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CAA70 = 0; - D_801CAA7C = 1; - D_801CAA80 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CAA70; -extern s32 D_801CAA7C; -extern s32 D_801CAA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CAA70 = 0; - D_801CAA7C = 1; - D_801CAA80 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018DE24[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018DE24[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CAA70; - -void func_80158BB0(void *arg0) { - if (D_801CAA70 == 0) { - D_801CAA70 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CAA7C; -extern s32 D_8018DDF8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CAA7C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018DDF8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CAA80; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CAA80 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CAA70; -extern s32 D_801CAA78; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CAA70 == 4) { - D_801CAA70 = 5; - } - if (D_801CAA78 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018DE60[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018DE60; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_801594E8); - - -extern void (*D_8018E074[])(void); - -void func_80159698(void *a0) { - D_8018E074[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018DE94)); - func_80028620(1, &(*(u8 *)&D_8018DE94) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018DE94) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018E118[])(void); - -void func_80159968(void *a0) { - D_8018E118[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018E26C[])(void); - -void func_80159B70(void *a0) { - D_8018E26C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018E088; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018E088); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018E274[])(void); - -void func_8015A264(void *a0) { - D_8018E274[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018E098; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018E098); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018E124[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018E0A8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018E124[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018E0A8); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018E124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018E0B8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018E0B8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018E0B8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018E27C[])(void); - -void func_8015AD3C(void *a0) { - D_8018E27C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8015444C.c b/src/ov_SC03_090/ov_SC03_090_jr_8015444C.c new file mode 100644 index 000000000..622cdfe37 --- /dev/null +++ b/src/ov_SC03_090/ov_SC03_090_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DFC0; +extern u8 D_8018DF30; +extern u8 D_8018DF0C; +extern u8 D_8018DEE8; +extern u8 D_8018DF9C; +extern u8 D_8018DF78; +extern u8 D_8018DF54; +extern u8 D_8018DEC4; +extern void func_80145934(void); +extern u8 D_8018E050; +extern u8 D_8018E02C; +extern u8 D_8018E008; +extern u8 D_8018DFE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern unsigned char D_8018D4C8[]; +extern unsigned char D_8018D4F8[]; +extern unsigned char D_8018D528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D6C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D6D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D7A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D7CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D7BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D7E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D7EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D7FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D86C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D880; +extern void (*D_8018D8A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018D8B4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018D8B4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018D8F4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018D8F4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018D8F8[])(void); + +void func_80155580(void *a0) { + D_8018D8F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018DAEC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018DAEC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018DD5C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DD5C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018DD5C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018DD6C[])(void); + +void func_80157544(void *a0) { + D_8018DD6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CAA68; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CAA68 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CAA68 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018DD94[])(void); +extern int D_801CAA68; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018DD94[*(unsigned short *)((char *)param_1 + 2)](); + D_801CAA68 = D_801CAA68 - 1; + if (D_801CAA68 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DD74; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018DD74); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018DD84; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018DD84); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018DDD4[])(void); + +void func_80157DC4(void *a0) { + D_8018DDD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018DDDC[])(void); + +void func_80157FC4(void *a0) { + D_8018DDDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018DDA8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018DDA8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018DDE8[])(void); + +void func_8015824C(void *a0) { + D_8018DDE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018DDB8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018DDB8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CAA70; +extern s32 D_801CAA7C; +extern s32 D_801CAA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CAA70 = 0; + D_801CAA7C = 1; + D_801CAA80 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CAA70; +extern s32 D_801CAA7C; +extern s32 D_801CAA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CAA70 = 0; + D_801CAA7C = 1; + D_801CAA80 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018DE24[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018DE24[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CAA70; + +void func_80158BB0(void *arg0) { + if (D_801CAA70 == 0) { + D_801CAA70 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CAA7C; +extern s32 D_8018DDF8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CAA7C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018DDF8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CAA80; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CAA80 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CAA70; +extern s32 D_801CAA78; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CAA70 == 4) { + D_801CAA70 = 5; + } + if (D_801CAA78 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018DE60[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018DE60; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_801594E8); + + +extern void (*D_8018E074[])(void); + +void func_80159698(void *a0) { + D_8018E074[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018DE94)); + func_80028620(1, &(*(u8 *)&D_8018DE94) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018DE94) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018E118[])(void); + +void func_80159968(void *a0) { + D_8018E118[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018E26C[])(void); + +void func_80159B70(void *a0) { + D_8018E26C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018E088; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018E088); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018E274[])(void); + +void func_8015A264(void *a0) { + D_8018E274[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018E098; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018E098); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_090/ov_SC03_090_jr_8015A3C8.c b/src/ov_SC03_090/ov_SC03_090_jr_8015A3C8.c new file mode 100644 index 000000000..a2507a0bf --- /dev/null +++ b/src/ov_SC03_090/ov_SC03_090_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018DFC0; +extern u8 D_8018DF30; +extern u8 D_8018DF0C; +extern u8 D_8018DEE8; +extern u8 D_8018DF9C; +extern u8 D_8018DF78; +extern u8 D_8018DF54; +extern u8 D_8018DEC4; +extern void func_80145934(void); +extern u8 D_8018E050; +extern u8 D_8018E02C; +extern u8 D_8018E008; +extern u8 D_8018DFE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018D448[]; +extern unsigned char D_8018D478[]; +extern unsigned char D_8018D4C8[]; +extern unsigned char D_8018D4F8[]; +extern unsigned char D_8018D528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018D578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018D640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018D6C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018D6D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018D700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018D7A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018D7CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018D7BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018D7E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018D7EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018D7FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018D814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018D804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018D828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018D844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018D834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018D858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018D86C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018D880; +extern void (*D_8018D8A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018D888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018D8F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018D8F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018DD5C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018DD6C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CAA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018DD94[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018DD74; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018DD84; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018DDD4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018DDDC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018DDA8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018DDE8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018DDB8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CAA70; +extern s32 D_801CAA7C; +extern s32 D_801CAA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018DE24[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018DDF8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CAA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018E074[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018DE94[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018E118[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018E26C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018E088; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018E274[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018E098; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018E124[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018E0A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018E124[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018E0A8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018E124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018E0B8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018E0B8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018E0B8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018E27C[])(void); + +void func_8015AD3C(void *a0) { + D_8018E27C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_091/ov_SC03_091_after.c b/src/ov_SC03_091/ov_SC03_091_after.c index ef4964800..a1ed91786 100644 --- a/src/ov_SC03_091/ov_SC03_091_after.c +++ b/src/ov_SC03_091/ov_SC03_091_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_091/nonmatchings/ov_SC03_091_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018E75C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018E75C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018E79C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018E79C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018E7A0[])(void); - -void func_80155580(void *a0) { - D_8018E7A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018E994[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018E994[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018EC04 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018EC04[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018EC04[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018EC14[])(void); - -void func_80157544(void *a0) { - D_8018EC14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D1138; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D1138 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D1138 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018EC3C[])(void); -extern int D_801D1138; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018EC3C[*(unsigned short *)((char *)param_1 + 2)](); - D_801D1138 = D_801D1138 - 1; - if (D_801D1138 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018EC1C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018EC1C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018EC2C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018EC2C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018EC7C[])(void); - -void func_80157DC4(void *a0) { - D_8018EC7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018EC84[])(void); - -void func_80157FC4(void *a0) { - D_8018EC84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018EC50; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018EC50); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018EC90[])(void); - -void func_8015824C(void *a0) { - D_8018EC90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018EC60; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018EC60); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D1140; -extern s32 D_801D114C; -extern s32 D_801D1150; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D1140 = 0; - D_801D114C = 1; - D_801D1150 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D1140; -extern s32 D_801D114C; -extern s32 D_801D1150; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D1140 = 0; - D_801D114C = 1; - D_801D1150 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018ECCC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018ECCC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D1140; - -void func_80158BB0(void *arg0) { - if (D_801D1140 == 0) { - D_801D1140 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D114C; -extern s32 D_8018ECA0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D114C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018ECA0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D1150; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D1150 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D1140; -extern s32 D_801D1148; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D1140 == 4) { - D_801D1140 = 5; - } - if (D_801D1148 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018ED08[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018ED08; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_801594E8); - - -extern void (*D_8018EF1C[])(void); - -void func_80159698(void *a0) { - D_8018EF1C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018ED3C)); - func_80028620(1, &(*(u8 *)&D_8018ED3C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018ED3C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018EFC0[])(void); - -void func_80159968(void *a0) { - D_8018EFC0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018F114[])(void); - -void func_80159B70(void *a0) { - D_8018F114[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018EF30; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EF30); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018F11C[])(void); - -void func_8015A264(void *a0) { - D_8018F11C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018EF40; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EF40); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018EFCC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_8018EF50; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EF50)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018EFCC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EF60 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018EF60; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018EF60); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018F124[])(void); - -void func_8015AD3C(void *a0) { - D_8018F124[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8015444C.c b/src/ov_SC03_091/ov_SC03_091_jr_8015444C.c new file mode 100644 index 000000000..36f076377 --- /dev/null +++ b/src/ov_SC03_091/ov_SC03_091_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EE68; +extern u8 D_8018EDD8; +extern u8 D_8018EDB4; +extern u8 D_8018ED90; +extern u8 D_8018EE44; +extern u8 D_8018EE20; +extern u8 D_8018EDFC; +extern u8 D_8018ED6C; +extern void func_80145934(void); +extern u8 D_8018EEF8; +extern u8 D_8018EED4; +extern u8 D_8018EEB0; +extern u8 D_8018EE8C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018E2F0[]; +extern unsigned char D_8018E320[]; +extern unsigned char D_8018E370[]; +extern unsigned char D_8018E3A0[]; +extern unsigned char D_8018E3D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E420[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E4E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E570[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E578; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1100; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1104; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E5A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E650[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E674[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E664; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E688[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E694[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E6A4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E6BC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E6AC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E6D0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E6EC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E6DC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E700[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E714[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E728; +extern void (*D_8018E750[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E730; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018E75C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018E75C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018E79C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018E79C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018E7A0[])(void); + +void func_80155580(void *a0) { + D_8018E7A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018E994[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018E994[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018EC04 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018EC04[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018EC04[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018EC14[])(void); + +void func_80157544(void *a0) { + D_8018EC14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D1138; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D1138 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D1138 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018EC3C[])(void); +extern int D_801D1138; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018EC3C[*(unsigned short *)((char *)param_1 + 2)](); + D_801D1138 = D_801D1138 - 1; + if (D_801D1138 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018EC1C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018EC1C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018EC2C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018EC2C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018EC7C[])(void); + +void func_80157DC4(void *a0) { + D_8018EC7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018EC84[])(void); + +void func_80157FC4(void *a0) { + D_8018EC84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018EC50; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018EC50); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018EC90[])(void); + +void func_8015824C(void *a0) { + D_8018EC90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018EC60; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018EC60); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D1140; +extern s32 D_801D114C; +extern s32 D_801D1150; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D1140 = 0; + D_801D114C = 1; + D_801D1150 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D1140; +extern s32 D_801D114C; +extern s32 D_801D1150; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D1140 = 0; + D_801D114C = 1; + D_801D1150 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018ECCC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018ECCC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D1140; + +void func_80158BB0(void *arg0) { + if (D_801D1140 == 0) { + D_801D1140 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D114C; +extern s32 D_8018ECA0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D114C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018ECA0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D1150; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D1150 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1140; +extern s32 D_801D1148; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D1140 == 4) { + D_801D1140 = 5; + } + if (D_801D1148 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018ED08[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018ED08; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_801594E8); + + +extern void (*D_8018EF1C[])(void); + +void func_80159698(void *a0) { + D_8018EF1C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018ED3C)); + func_80028620(1, &(*(u8 *)&D_8018ED3C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018ED3C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018EFC0[])(void); + +void func_80159968(void *a0) { + D_8018EFC0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018F114[])(void); + +void func_80159B70(void *a0) { + D_8018F114[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018EF30; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EF30); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018F11C[])(void); + +void func_8015A264(void *a0) { + D_8018F11C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018EF40; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EF40); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_091/ov_SC03_091_jr_8015A3C8.c b/src/ov_SC03_091/ov_SC03_091_jr_8015A3C8.c new file mode 100644 index 000000000..5b73b32f3 --- /dev/null +++ b/src/ov_SC03_091/ov_SC03_091_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EE68; +extern u8 D_8018EDD8; +extern u8 D_8018EDB4; +extern u8 D_8018ED90; +extern u8 D_8018EE44; +extern u8 D_8018EE20; +extern u8 D_8018EDFC; +extern u8 D_8018ED6C; +extern void func_80145934(void); +extern u8 D_8018EEF8; +extern u8 D_8018EED4; +extern u8 D_8018EEB0; +extern u8 D_8018EE8C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018E2F0[]; +extern unsigned char D_8018E320[]; +extern unsigned char D_8018E370[]; +extern unsigned char D_8018E3A0[]; +extern unsigned char D_8018E3D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E420[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E4E8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E570[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E578; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1100; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1104; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E5A8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E650[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E674[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E664; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E688[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E694[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E6A4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E6BC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E6AC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E6D0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E6EC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E6DC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E700[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E714[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E728; +extern void (*D_8018E750[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E730; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E79C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E7A0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018EC04[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018EC14[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1138; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018EC3C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018EC1C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018EC2C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018EC7C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018EC84[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018EC50; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018EC90[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018EC60; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1140; +extern s32 D_801D114C; +extern s32 D_801D1150; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018ECCC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018ECA0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1148; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EF1C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018ED3C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EFC0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F114[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EF30; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018F11C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EF40; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EFCC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018EF50; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EF50)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EFCC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EF60 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EF60; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018EF60); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018F124[])(void); + +void func_8015AD3C(void *a0) { + D_8018F124[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_092/ov_SC03_092_after.c b/src/ov_SC03_092/ov_SC03_092_after.c index 9ceb2f2e3..7fe4f165f 100644 --- a/src/ov_SC03_092/ov_SC03_092_after.c +++ b/src/ov_SC03_092/ov_SC03_092_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_092/nonmatchings/ov_SC03_092_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186B2C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186B2C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186B6C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186B6C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186B70[])(void); - -void func_80155580(void *a0) { - D_80186B70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186D64[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186D64[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186FD4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186FD4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186FD4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186FE4[])(void); - -void func_80157544(void *a0) { - D_80186FE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B1D00; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B1D00 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B1D00 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018700C[])(void); -extern int D_801B1D00; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018700C[*(unsigned short *)((char *)param_1 + 2)](); - D_801B1D00 = D_801B1D00 - 1; - if (D_801B1D00 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186FEC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186FEC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186FFC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186FFC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018704C[])(void); - -void func_80157DC4(void *a0) { - D_8018704C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187054[])(void); - -void func_80157FC4(void *a0) { - D_80187054[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187020; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187020); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187060[])(void); - -void func_8015824C(void *a0) { - D_80187060[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187030; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187030); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B1D08; -extern s32 D_801B1D14; -extern s32 D_801B1D18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B1D08 = 0; - D_801B1D14 = 1; - D_801B1D18 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B1D08; -extern s32 D_801B1D14; -extern s32 D_801B1D18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B1D08 = 0; - D_801B1D14 = 1; - D_801B1D18 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018709C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018709C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B1D08; - -void func_80158BB0(void *arg0) { - if (D_801B1D08 == 0) { - D_801B1D08 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B1D14; -extern s32 D_80187070[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B1D14; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187070[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B1D18; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B1D18 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B1D08; -extern s32 D_801B1D10; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B1D08 == 4) { - D_801B1D08 = 5; - } - if (D_801B1D10 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801870D8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801870D8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_801594E8); - - -extern void (*D_801872EC[])(void); - -void func_80159698(void *a0) { - D_801872EC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018710C)); - func_80028620(1, &(*(u8 *)&D_8018710C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018710C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187390[])(void); - -void func_80159968(void *a0) { - D_80187390[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801874E4[])(void); - -void func_80159B70(void *a0) { - D_801874E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187300; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187300); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801874EC[])(void); - -void func_8015A264(void *a0) { - D_801874EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187310; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187310); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018739C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80187320; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018739C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187320); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018739C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187330 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80187330; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80187330); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801874F4[])(void); - -void func_8015AD3C(void *a0) { - D_801874F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8015444C.c b/src/ov_SC03_092/ov_SC03_092_jr_8015444C.c new file mode 100644 index 000000000..97fca32bf --- /dev/null +++ b/src/ov_SC03_092/ov_SC03_092_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187238; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern u8 D_8018713C; +extern void func_80145934(void); +extern u8 D_801872C8; +extern u8 D_801872A4; +extern u8 D_80187280; +extern u8 D_8018725C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801866C0[]; +extern unsigned char D_801866F0[]; +extern unsigned char D_80186740[]; +extern unsigned char D_80186770[]; +extern unsigned char D_801867A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801867F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801868B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186940[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186948; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B1CC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B1CCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186978; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186A20[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186A44[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186A34; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186A58[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186A64[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A74[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A8C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A7C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186AA0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186ABC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186AAC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186AD0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186AE4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186AF8; +extern void (*D_80186B20[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186B00; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186B2C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186B2C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186B6C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186B6C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186B70[])(void); + +void func_80155580(void *a0) { + D_80186B70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186D64[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186D64[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186FD4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186FD4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186FD4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186FE4[])(void); + +void func_80157544(void *a0) { + D_80186FE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B1D00; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B1D00 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B1D00 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018700C[])(void); +extern int D_801B1D00; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018700C[*(unsigned short *)((char *)param_1 + 2)](); + D_801B1D00 = D_801B1D00 - 1; + if (D_801B1D00 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186FEC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186FEC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186FFC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186FFC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018704C[])(void); + +void func_80157DC4(void *a0) { + D_8018704C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187054[])(void); + +void func_80157FC4(void *a0) { + D_80187054[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187020; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187020); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187060[])(void); + +void func_8015824C(void *a0) { + D_80187060[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187030; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187030); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B1D08; +extern s32 D_801B1D14; +extern s32 D_801B1D18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B1D08 = 0; + D_801B1D14 = 1; + D_801B1D18 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B1D08; +extern s32 D_801B1D14; +extern s32 D_801B1D18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B1D08 = 0; + D_801B1D14 = 1; + D_801B1D18 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018709C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018709C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B1D08; + +void func_80158BB0(void *arg0) { + if (D_801B1D08 == 0) { + D_801B1D08 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B1D14; +extern s32 D_80187070[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B1D14; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187070[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B1D18; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B1D18 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B1D08; +extern s32 D_801B1D10; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B1D08 == 4) { + D_801B1D08 = 5; + } + if (D_801B1D10 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801870D8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801870D8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_801594E8); + + +extern void (*D_801872EC[])(void); + +void func_80159698(void *a0) { + D_801872EC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018710C)); + func_80028620(1, &(*(u8 *)&D_8018710C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018710C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187390[])(void); + +void func_80159968(void *a0) { + D_80187390[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801874E4[])(void); + +void func_80159B70(void *a0) { + D_801874E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187300; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187300); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801874EC[])(void); + +void func_8015A264(void *a0) { + D_801874EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187310; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187310); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_092/ov_SC03_092_jr_8015A3C8.c b/src/ov_SC03_092/ov_SC03_092_jr_8015A3C8.c new file mode 100644 index 000000000..472b3170c --- /dev/null +++ b/src/ov_SC03_092/ov_SC03_092_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187238; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_80187214; +extern u8 D_801871F0; +extern u8 D_801871CC; +extern u8 D_8018713C; +extern void func_80145934(void); +extern u8 D_801872C8; +extern u8 D_801872A4; +extern u8 D_80187280; +extern u8 D_8018725C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801866C0[]; +extern unsigned char D_801866F0[]; +extern unsigned char D_80186740[]; +extern unsigned char D_80186770[]; +extern unsigned char D_801867A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801867F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801868B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186940[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186948; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B1CC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B1CCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186978; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186A20[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186A44[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186A34; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186A58[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186A64[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A74[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A8C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A7C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186AA0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186ABC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186AAC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186AD0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186AE4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186AF8; +extern void (*D_80186B20[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186B00; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186B6C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186B70[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186FD4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186FE4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B1D00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018700C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186FEC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186FFC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018704C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187054[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187020; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187060[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187030; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B1D08; +extern s32 D_801B1D14; +extern s32 D_801B1D18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018709C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187070[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B1D10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801872EC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018710C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187390[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801874E4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187300; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801874EC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187310; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018739C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187320; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018739C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187320); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018739C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187330 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187330; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80187330); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801874F4[])(void); + +void func_8015AD3C(void *a0) { + D_801874F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_093/ov_SC03_093_after.c b/src/ov_SC03_093/ov_SC03_093_after.c index 6e6af769e..881a62055 100644 --- a/src/ov_SC03_093/ov_SC03_093_after.c +++ b/src/ov_SC03_093/ov_SC03_093_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_093/nonmatchings/ov_SC03_093_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187D04[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187D04[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187D44[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187D44[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187D48[])(void); - -void func_80155580(void *a0) { - D_80187D48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187F3C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187F3C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801881AC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801881AC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801881AC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801881BC[])(void); - -void func_80157544(void *a0) { - D_801881BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CB170; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CB170 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CB170 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801881E4[])(void); -extern int D_801CB170; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801881E4[*(unsigned short *)((char *)param_1 + 2)](); - D_801CB170 = D_801CB170 - 1; - if (D_801CB170 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801881C4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801881C4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801881D4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801881D4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188224[])(void); - -void func_80157DC4(void *a0) { - D_80188224[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018822C[])(void); - -void func_80157FC4(void *a0) { - D_8018822C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801881F8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801881F8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80188238[])(void); - -void func_8015824C(void *a0) { - D_80188238[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80188208; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188208); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CB178; -extern s32 D_801CB184; -extern s32 D_801CB188; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CB178 = 0; - D_801CB184 = 1; - D_801CB188 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CB178; -extern s32 D_801CB184; -extern s32 D_801CB188; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CB178 = 0; - D_801CB184 = 1; - D_801CB188 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188274[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188274[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CB178; - -void func_80158BB0(void *arg0) { - if (D_801CB178 == 0) { - D_801CB178 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CB184; -extern s32 D_80188248[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CB184; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188248[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CB188; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CB188 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CB178; -extern s32 D_801CB180; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CB178 == 4) { - D_801CB178 = 5; - } - if (D_801CB180 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801882B0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801882B0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_801594E8); - - -extern void (*D_801884C4[])(void); - -void func_80159698(void *a0) { - D_801884C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801882E4)); - func_80028620(1, &(*(u8 *)&D_801882E4) + 0x10); - func_80028620(2, &(*(u8 *)&D_801882E4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188568[])(void); - -void func_80159968(void *a0) { - D_80188568[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801886BC[])(void); - -void func_80159B70(void *a0) { - D_801886BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801884D8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801884D8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801886C4[])(void); - -void func_8015A264(void *a0) { - D_801886C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801884E8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801884E8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188574[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801884F8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188574[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801884F8); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188574[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188508 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80188508; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80188508); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801886CC[])(void); - -void func_8015AD3C(void *a0) { - D_801886CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8015444C.c b/src/ov_SC03_093/ov_SC03_093_jr_8015444C.c new file mode 100644 index 000000000..b816b3bd4 --- /dev/null +++ b/src/ov_SC03_093/ov_SC03_093_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188410; +extern u8 D_80188380; +extern u8 D_8018835C; +extern u8 D_80188338; +extern u8 D_801883EC; +extern u8 D_801883C8; +extern u8 D_801883A4; +extern u8 D_80188314; +extern void func_80145934(void); +extern u8 D_801884A0; +extern u8 D_8018847C; +extern u8 D_80188458; +extern u8 D_80188434; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187898[]; +extern unsigned char D_801878C8[]; +extern unsigned char D_80187918[]; +extern unsigned char D_80187948[]; +extern unsigned char D_80187978[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801879C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187B18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187B20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CB138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CB13C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187C1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187C0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187C30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187C3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187CA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187CBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187CD0; +extern void (*D_80187CF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187CD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187D04[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187D04[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187D44[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187D44[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187D48[])(void); + +void func_80155580(void *a0) { + D_80187D48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187F3C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187F3C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801881AC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801881AC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801881AC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801881BC[])(void); + +void func_80157544(void *a0) { + D_801881BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CB170; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CB170 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CB170 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801881E4[])(void); +extern int D_801CB170; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801881E4[*(unsigned short *)((char *)param_1 + 2)](); + D_801CB170 = D_801CB170 - 1; + if (D_801CB170 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801881C4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801881C4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801881D4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801881D4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188224[])(void); + +void func_80157DC4(void *a0) { + D_80188224[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018822C[])(void); + +void func_80157FC4(void *a0) { + D_8018822C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801881F8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801881F8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80188238[])(void); + +void func_8015824C(void *a0) { + D_80188238[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80188208; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188208); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CB178; +extern s32 D_801CB184; +extern s32 D_801CB188; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CB178 = 0; + D_801CB184 = 1; + D_801CB188 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CB178; +extern s32 D_801CB184; +extern s32 D_801CB188; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CB178 = 0; + D_801CB184 = 1; + D_801CB188 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188274[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188274[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CB178; + +void func_80158BB0(void *arg0) { + if (D_801CB178 == 0) { + D_801CB178 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CB184; +extern s32 D_80188248[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CB184; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188248[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CB188; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CB188 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CB178; +extern s32 D_801CB180; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CB178 == 4) { + D_801CB178 = 5; + } + if (D_801CB180 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801882B0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801882B0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_801594E8); + + +extern void (*D_801884C4[])(void); + +void func_80159698(void *a0) { + D_801884C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801882E4)); + func_80028620(1, &(*(u8 *)&D_801882E4) + 0x10); + func_80028620(2, &(*(u8 *)&D_801882E4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188568[])(void); + +void func_80159968(void *a0) { + D_80188568[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801886BC[])(void); + +void func_80159B70(void *a0) { + D_801886BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801884D8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801884D8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_093/nonmatchings/ov_SC03_093_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801886C4[])(void); + +void func_8015A264(void *a0) { + D_801886C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801884E8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801884E8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_093/ov_SC03_093_jr_8015A3C8.c b/src/ov_SC03_093/ov_SC03_093_jr_8015A3C8.c new file mode 100644 index 000000000..18e38793b --- /dev/null +++ b/src/ov_SC03_093/ov_SC03_093_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188410; +extern u8 D_80188380; +extern u8 D_8018835C; +extern u8 D_80188338; +extern u8 D_801883EC; +extern u8 D_801883C8; +extern u8 D_801883A4; +extern u8 D_80188314; +extern void func_80145934(void); +extern u8 D_801884A0; +extern u8 D_8018847C; +extern u8 D_80188458; +extern u8 D_80188434; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187898[]; +extern unsigned char D_801878C8[]; +extern unsigned char D_80187918[]; +extern unsigned char D_80187948[]; +extern unsigned char D_80187978[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801879C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187B18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187B20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CB138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CB13C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187C1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187C0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187C30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187C3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187CA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187CBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187CD0; +extern void (*D_80187CF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187CD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187D44[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187D48[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801881AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801881BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CB170; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801881E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801881C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801881D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188224[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018822C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801881F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188238[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188208; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CB178; +extern s32 D_801CB184; +extern s32 D_801CB188; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188274[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188248[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CB180; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801884C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801882E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188568[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801886BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801884D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801886C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801884E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188574[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801884F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188574[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801884F8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188574[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188508 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188508; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80188508); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801886CC[])(void); + +void func_8015AD3C(void *a0) { + D_801886CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_094/ov_SC03_094_after.c b/src/ov_SC03_094/ov_SC03_094_after.c index 105ed66c5..a415d525d 100644 --- a/src/ov_SC03_094/ov_SC03_094_after.c +++ b/src/ov_SC03_094/ov_SC03_094_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_094/nonmatchings/ov_SC03_094_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80189700[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80189700[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80189740[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80189740[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80189744[])(void); - -void func_80155580(void *a0) { - D_80189744[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80189938[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80189938[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189BA8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80189BA8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80189BA8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80189BB8[])(void); - -void func_80157544(void *a0) { - D_80189BB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D1FB0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D1FB0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D1FB0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80189BE0[])(void); -extern int D_801D1FB0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80189BE0[*(unsigned short *)((char *)param_1 + 2)](); - D_801D1FB0 = D_801D1FB0 - 1; - if (D_801D1FB0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80189BC0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189BC0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80189BD0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189BD0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80189C20[])(void); - -void func_80157DC4(void *a0) { - D_80189C20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80189C28[])(void); - -void func_80157FC4(void *a0) { - D_80189C28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80189BF4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80189BF4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80189C34[])(void); - -void func_8015824C(void *a0) { - D_80189C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80189C04; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189C04); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D1FB8; -extern s32 D_801D1FC4; -extern s32 D_801D1FC8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D1FB8 = 0; - D_801D1FC4 = 1; - D_801D1FC8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D1FB8; -extern s32 D_801D1FC4; -extern s32 D_801D1FC8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D1FB8 = 0; - D_801D1FC4 = 1; - D_801D1FC8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80189C70[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80189C70[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D1FB8; - -void func_80158BB0(void *arg0) { - if (D_801D1FB8 == 0) { - D_801D1FB8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D1FC4; -extern s32 D_80189C44[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D1FC4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189C44[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D1FC8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D1FC8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D1FB8; -extern s32 D_801D1FC0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D1FB8 == 4) { - D_801D1FB8 = 5; - } - if (D_801D1FC0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80189CAC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80189CAC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_801594E8); - - -extern void (*D_80189EC0[])(void); - -void func_80159698(void *a0) { - D_80189EC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80189CE0)); - func_80028620(1, &(*(u8 *)&D_80189CE0) + 0x10); - func_80028620(2, &(*(u8 *)&D_80189CE0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80189F64[])(void); - -void func_80159968(void *a0) { - D_80189F64[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018A0B8[])(void); - -void func_80159B70(void *a0) { - D_8018A0B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80189ED4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80189ED4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018A0C0[])(void); - -void func_8015A264(void *a0) { - D_8018A0C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80189EE4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189EE4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80189F70[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80189EF4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80189F70[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189EF4); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80189F70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189F04 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80189F04; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80189F04); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018A0C8[])(void); - -void func_8015AD3C(void *a0) { - D_8018A0C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8015444C.c b/src/ov_SC03_094/ov_SC03_094_jr_8015444C.c new file mode 100644 index 000000000..b12de60db --- /dev/null +++ b/src/ov_SC03_094/ov_SC03_094_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189E0C; +extern u8 D_80189D7C; +extern u8 D_80189D58; +extern u8 D_80189D34; +extern u8 D_80189DE8; +extern u8 D_80189DC4; +extern u8 D_80189DA0; +extern u8 D_80189D10; +extern void func_80145934(void); +extern u8 D_80189E9C; +extern u8 D_80189E78; +extern u8 D_80189E54; +extern u8 D_80189E30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189294[]; +extern unsigned char D_801892C4[]; +extern unsigned char D_80189314[]; +extern unsigned char D_80189344[]; +extern unsigned char D_80189374[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801893C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018948C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189514[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018951C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1F78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1F7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018954C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801895F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189618[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189608; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018962C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189638[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189648[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189660[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189650; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189674[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189690[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189680; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801896A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801896B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801896CC; +extern void (*D_801896F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801896D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80189700[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80189700[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80189740[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80189740[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80189744[])(void); + +void func_80155580(void *a0) { + D_80189744[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80189938[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80189938[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189BA8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80189BA8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80189BA8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80189BB8[])(void); + +void func_80157544(void *a0) { + D_80189BB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D1FB0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D1FB0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D1FB0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80189BE0[])(void); +extern int D_801D1FB0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80189BE0[*(unsigned short *)((char *)param_1 + 2)](); + D_801D1FB0 = D_801D1FB0 - 1; + if (D_801D1FB0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189BC0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189BC0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80189BD0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189BD0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80189C20[])(void); + +void func_80157DC4(void *a0) { + D_80189C20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80189C28[])(void); + +void func_80157FC4(void *a0) { + D_80189C28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80189BF4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80189BF4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80189C34[])(void); + +void func_8015824C(void *a0) { + D_80189C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80189C04; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189C04); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D1FB8; +extern s32 D_801D1FC4; +extern s32 D_801D1FC8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D1FB8 = 0; + D_801D1FC4 = 1; + D_801D1FC8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D1FB8; +extern s32 D_801D1FC4; +extern s32 D_801D1FC8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D1FB8 = 0; + D_801D1FC4 = 1; + D_801D1FC8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80189C70[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80189C70[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D1FB8; + +void func_80158BB0(void *arg0) { + if (D_801D1FB8 == 0) { + D_801D1FB8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D1FC4; +extern s32 D_80189C44[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D1FC4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189C44[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D1FC8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D1FC8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1FB8; +extern s32 D_801D1FC0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D1FB8 == 4) { + D_801D1FB8 = 5; + } + if (D_801D1FC0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80189CAC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80189CAC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_801594E8); + + +extern void (*D_80189EC0[])(void); + +void func_80159698(void *a0) { + D_80189EC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80189CE0)); + func_80028620(1, &(*(u8 *)&D_80189CE0) + 0x10); + func_80028620(2, &(*(u8 *)&D_80189CE0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80189F64[])(void); + +void func_80159968(void *a0) { + D_80189F64[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018A0B8[])(void); + +void func_80159B70(void *a0) { + D_8018A0B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80189ED4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80189ED4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_094/nonmatchings/ov_SC03_094_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018A0C0[])(void); + +void func_8015A264(void *a0) { + D_8018A0C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80189EE4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189EE4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_094/ov_SC03_094_jr_8015A3C8.c b/src/ov_SC03_094/ov_SC03_094_jr_8015A3C8.c new file mode 100644 index 000000000..ab4870320 --- /dev/null +++ b/src/ov_SC03_094/ov_SC03_094_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80189E0C; +extern u8 D_80189D7C; +extern u8 D_80189D58; +extern u8 D_80189D34; +extern u8 D_80189DE8; +extern u8 D_80189DC4; +extern u8 D_80189DA0; +extern u8 D_80189D10; +extern void func_80145934(void); +extern u8 D_80189E9C; +extern u8 D_80189E78; +extern u8 D_80189E54; +extern u8 D_80189E30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189294[]; +extern unsigned char D_801892C4[]; +extern unsigned char D_80189314[]; +extern unsigned char D_80189344[]; +extern unsigned char D_80189374[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801893C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018948C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189514[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018951C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D1F78; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D1F7C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018954C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801895F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189618[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189608; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018962C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189638[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189648[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189660[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189650; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189674[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80189690[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80189680; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801896A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801896B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801896CC; +extern void (*D_801896F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801896D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189740[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189744[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189BA8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189BB8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D1FB0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189BE0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189BC0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189BD0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189C20[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189C28[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189BF4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189C34[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189C04; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D1FB8; +extern s32 D_801D1FC4; +extern s32 D_801D1FC8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189C70[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189C44[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D1FC0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80189EC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189CE0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189F64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018A0B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80189ED4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018A0C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189EE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80189F70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80189EF4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80189F70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189EF4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80189F70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189F04 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189F04; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80189F04); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018A0C8[])(void); + +void func_8015AD3C(void *a0) { + D_8018A0C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_095/ov_SC03_095_after.c b/src/ov_SC03_095/ov_SC03_095_after.c index de41f688e..b524bfdbf 100644 --- a/src/ov_SC03_095/ov_SC03_095_after.c +++ b/src/ov_SC03_095/ov_SC03_095_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_095/nonmatchings/ov_SC03_095_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80182D60[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80182D60[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182DA0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182DA0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80182DA4[])(void); - -void func_80155580(void *a0) { - D_80182DA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182F98[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182F98[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183208 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80183208[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80183208[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80183218[])(void); - -void func_80157544(void *a0) { - D_80183218[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019ABA8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019ABA8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019ABA8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80183240[])(void); -extern int D_8019ABA8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80183240[*(unsigned short *)((char *)param_1 + 2)](); - D_8019ABA8 = D_8019ABA8 - 1; - if (D_8019ABA8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80183220; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183220); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80183230; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183230); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80183280[])(void); - -void func_80157DC4(void *a0) { - D_80183280[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80183288[])(void); - -void func_80157FC4(void *a0) { - D_80183288[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80183254; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80183254); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80183294[])(void); - -void func_8015824C(void *a0) { - D_80183294[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80183264; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183264); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019ABB0; -extern s32 D_8019ABBC; -extern s32 D_8019ABC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019ABB0 = 0; - D_8019ABBC = 1; - D_8019ABC0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019ABB0; -extern s32 D_8019ABBC; -extern s32 D_8019ABC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019ABB0 = 0; - D_8019ABBC = 1; - D_8019ABC0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801832D0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801832D0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019ABB0; - -void func_80158BB0(void *arg0) { - if (D_8019ABB0 == 0) { - D_8019ABB0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019ABBC; -extern s32 D_801832A4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019ABBC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801832A4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019ABC0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019ABC0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019ABB0; -extern s32 D_8019ABB8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019ABB0 == 4) { - D_8019ABB0 = 5; - } - if (D_8019ABB8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018330C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018330C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_801594E8); - - -extern void (*D_80183520[])(void); - -void func_80159698(void *a0) { - D_80183520[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80183340)); - func_80028620(1, &(*(u8 *)&D_80183340) + 0x10); - func_80028620(2, &(*(u8 *)&D_80183340) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801835C4[])(void); - -void func_80159968(void *a0) { - D_801835C4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183718[])(void); - -void func_80159B70(void *a0) { - D_80183718[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80183534; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183534); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80183720[])(void); - -void func_8015A264(void *a0) { - D_80183720[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80183544; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183544); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801835D0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80183554; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801835D0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183554)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801835D0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183564 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80183564; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80183564); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183728[])(void); - -void func_8015AD3C(void *a0) { - D_80183728[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8015444C.c b/src/ov_SC03_095/ov_SC03_095_jr_8015444C.c new file mode 100644 index 000000000..7bea5d6af --- /dev/null +++ b/src/ov_SC03_095/ov_SC03_095_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018346C; +extern u8 D_801833DC; +extern u8 D_801833B8; +extern u8 D_80183394; +extern u8 D_80183448; +extern u8 D_80183424; +extern u8 D_80183400; +extern u8 D_80183370; +extern void func_80145934(void); +extern u8 D_801834FC; +extern u8 D_801834D8; +extern u8 D_801834B4; +extern u8 D_80183490; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F4[]; +extern unsigned char D_80182924[]; +extern unsigned char D_80182974[]; +extern unsigned char D_801829A4[]; +extern unsigned char D_801829D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A24[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AEC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B74[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B7C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AB70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AB74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BAC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C54[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C78[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C68; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C8C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C98[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CC0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CB0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CF0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CE0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D04[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D18[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D2C; +extern void (*D_80182D54[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D34; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80182D60[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80182D60[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182DA0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182DA0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80182DA4[])(void); + +void func_80155580(void *a0) { + D_80182DA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182F98[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182F98[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183208 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80183208[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80183208[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80183218[])(void); + +void func_80157544(void *a0) { + D_80183218[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019ABA8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019ABA8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019ABA8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80183240[])(void); +extern int D_8019ABA8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80183240[*(unsigned short *)((char *)param_1 + 2)](); + D_8019ABA8 = D_8019ABA8 - 1; + if (D_8019ABA8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183220; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183220); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80183230; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183230); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80183280[])(void); + +void func_80157DC4(void *a0) { + D_80183280[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80183288[])(void); + +void func_80157FC4(void *a0) { + D_80183288[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80183254; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80183254); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80183294[])(void); + +void func_8015824C(void *a0) { + D_80183294[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80183264; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80183264); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019ABB0; +extern s32 D_8019ABBC; +extern s32 D_8019ABC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019ABB0 = 0; + D_8019ABBC = 1; + D_8019ABC0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019ABB0; +extern s32 D_8019ABBC; +extern s32 D_8019ABC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019ABB0 = 0; + D_8019ABBC = 1; + D_8019ABC0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801832D0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801832D0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019ABB0; + +void func_80158BB0(void *arg0) { + if (D_8019ABB0 == 0) { + D_8019ABB0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019ABBC; +extern s32 D_801832A4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019ABBC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801832A4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019ABC0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019ABC0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ABB0; +extern s32 D_8019ABB8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019ABB0 == 4) { + D_8019ABB0 = 5; + } + if (D_8019ABB8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018330C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018330C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_801594E8); + + +extern void (*D_80183520[])(void); + +void func_80159698(void *a0) { + D_80183520[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80183340)); + func_80028620(1, &(*(u8 *)&D_80183340) + 0x10); + func_80028620(2, &(*(u8 *)&D_80183340) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801835C4[])(void); + +void func_80159968(void *a0) { + D_801835C4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183718[])(void); + +void func_80159B70(void *a0) { + D_80183718[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80183534; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183534); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_095/nonmatchings/ov_SC03_095_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80183720[])(void); + +void func_8015A264(void *a0) { + D_80183720[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80183544; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183544); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_095/ov_SC03_095_jr_8015A3C8.c b/src/ov_SC03_095/ov_SC03_095_jr_8015A3C8.c new file mode 100644 index 000000000..b2c158833 --- /dev/null +++ b/src/ov_SC03_095/ov_SC03_095_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018346C; +extern u8 D_801833DC; +extern u8 D_801833B8; +extern u8 D_80183394; +extern u8 D_80183448; +extern u8 D_80183424; +extern u8 D_80183400; +extern u8 D_80183370; +extern void func_80145934(void); +extern u8 D_801834FC; +extern u8 D_801834D8; +extern u8 D_801834B4; +extern u8 D_80183490; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801828F4[]; +extern unsigned char D_80182924[]; +extern unsigned char D_80182974[]; +extern unsigned char D_801829A4[]; +extern unsigned char D_801829D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182A24[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182AEC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182B74[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182B7C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019AB70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019AB74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182BAC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182C54[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182C78[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182C68; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182C8C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182C98[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182CA8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182CC0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182CB0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182CD4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182CF0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182CE0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182D04[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182D18[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182D2C; +extern void (*D_80182D54[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182D34; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182DA0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182DA4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183208[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183218[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019ABA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183240[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183220; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183230; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80183280[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183288[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80183254; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183294[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80183264; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019ABB0; +extern s32 D_8019ABBC; +extern s32 D_8019ABC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801832D0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801832A4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ABB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183520[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183340[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801835C4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183718[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183534; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183720[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183544; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801835D0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80183554; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801835D0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183554)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801835D0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183564 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183564; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80183564); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183728[])(void); + +void func_8015AD3C(void *a0) { + D_80183728[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_096/ov_SC03_096_after.c b/src/ov_SC03_096/ov_SC03_096_after.c index e9c3f3d00..5f4cc194e 100644 --- a/src/ov_SC03_096/ov_SC03_096_after.c +++ b/src/ov_SC03_096/ov_SC03_096_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_096/nonmatchings/ov_SC03_096_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801828E0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801828E0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182920[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182920[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80182924[])(void); - -void func_80155580(void *a0) { - D_80182924[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182B18[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182B18[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182D88 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182D88[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182D88[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182D98[])(void); - -void func_80157544(void *a0) { - D_80182D98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80199660; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80199660 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80199660 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182DC0[])(void); -extern int D_80199660; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182DC0[*(unsigned short *)((char *)param_1 + 2)](); - D_80199660 = D_80199660 - 1; - if (D_80199660 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80182DA0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182DA0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80182DB0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182DB0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182E00[])(void); - -void func_80157DC4(void *a0) { - D_80182E00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182E08[])(void); - -void func_80157FC4(void *a0) { - D_80182E08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182DD4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182DD4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80182E14[])(void); - -void func_8015824C(void *a0) { - D_80182E14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182DE4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182DE4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80199668; -extern s32 D_80199674; -extern s32 D_80199678; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80199668 = 0; - D_80199674 = 1; - D_80199678 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80199668; -extern s32 D_80199674; -extern s32 D_80199678; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80199668 = 0; - D_80199674 = 1; - D_80199678 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80182E50[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80182E50[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80199668; - -void func_80158BB0(void *arg0) { - if (D_80199668 == 0) { - D_80199668 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80199674; -extern s32 D_80182E24[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80199674; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182E24[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80199678; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80199678 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80199668; -extern s32 D_80199670; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80199668 == 4) { - D_80199668 = 5; - } - if (D_80199670 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182E8C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182E8C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_801594E8); - - -extern void (*D_801830A0[])(void); - -void func_80159698(void *a0) { - D_801830A0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80182EC0)); - func_80028620(1, &(*(u8 *)&D_80182EC0) + 0x10); - func_80028620(2, &(*(u8 *)&D_80182EC0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80183144[])(void); - -void func_80159968(void *a0) { - D_80183144[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183298[])(void); - -void func_80159B70(void *a0) { - D_80183298[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801830B4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801830B4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801832A0[])(void); - -void func_8015A264(void *a0) { - D_801832A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801830C4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801830C4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80183150[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_801830D4[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80183150[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801830D4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80183150[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801830E4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801830E4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801830E4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801832A8[])(void); - -void func_8015AD3C(void *a0) { - D_801832A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8015444C.c b/src/ov_SC03_096/ov_SC03_096_jr_8015444C.c new file mode 100644 index 000000000..d54db8c1c --- /dev/null +++ b/src/ov_SC03_096/ov_SC03_096_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182FEC; +extern u8 D_80182F5C; +extern u8 D_80182F38; +extern u8 D_80182F14; +extern u8 D_80182FC8; +extern u8 D_80182FA4; +extern u8 D_80182F80; +extern u8 D_80182EF0; +extern void func_80145934(void); +extern u8 D_8018307C; +extern u8 D_80183058; +extern u8 D_80183034; +extern u8 D_80183010; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182474[]; +extern unsigned char D_801824A4[]; +extern unsigned char D_801824F4[]; +extern unsigned char D_80182524[]; +extern unsigned char D_80182554[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801825A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018266C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801826F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199628; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019962C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018272C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801827D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801827E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018280C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182818[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182828[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182840[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182830; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182854[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182870[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182860; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182884[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182898[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801828AC; +extern void (*D_801828D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801828B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801828E0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801828E0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182920[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182920[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80182924[])(void); + +void func_80155580(void *a0) { + D_80182924[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182B18[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182B18[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182D88 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D88[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182D88[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182D98[])(void); + +void func_80157544(void *a0) { + D_80182D98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80199660; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80199660 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80199660 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182DC0[])(void); +extern int D_80199660; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182DC0[*(unsigned short *)((char *)param_1 + 2)](); + D_80199660 = D_80199660 - 1; + if (D_80199660 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182DA0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182DA0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80182DB0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182DB0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182E00[])(void); + +void func_80157DC4(void *a0) { + D_80182E00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182E08[])(void); + +void func_80157FC4(void *a0) { + D_80182E08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182DD4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182DD4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80182E14[])(void); + +void func_8015824C(void *a0) { + D_80182E14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182DE4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182DE4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80199668; +extern s32 D_80199674; +extern s32 D_80199678; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80199668 = 0; + D_80199674 = 1; + D_80199678 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80199668; +extern s32 D_80199674; +extern s32 D_80199678; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80199668 = 0; + D_80199674 = 1; + D_80199678 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80182E50[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80182E50[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80199668; + +void func_80158BB0(void *arg0) { + if (D_80199668 == 0) { + D_80199668 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80199674; +extern s32 D_80182E24[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80199674; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182E24[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80199678; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80199678 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80199668; +extern s32 D_80199670; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80199668 == 4) { + D_80199668 = 5; + } + if (D_80199670 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182E8C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182E8C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_801594E8); + + +extern void (*D_801830A0[])(void); + +void func_80159698(void *a0) { + D_801830A0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80182EC0)); + func_80028620(1, &(*(u8 *)&D_80182EC0) + 0x10); + func_80028620(2, &(*(u8 *)&D_80182EC0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80183144[])(void); + +void func_80159968(void *a0) { + D_80183144[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183298[])(void); + +void func_80159B70(void *a0) { + D_80183298[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801830B4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801830B4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801832A0[])(void); + +void func_8015A264(void *a0) { + D_801832A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801830C4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801830C4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_096/ov_SC03_096_jr_8015A3C8.c b/src/ov_SC03_096/ov_SC03_096_jr_8015A3C8.c new file mode 100644 index 000000000..675c7ad3c --- /dev/null +++ b/src/ov_SC03_096/ov_SC03_096_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182FEC; +extern u8 D_80182F5C; +extern u8 D_80182F38; +extern u8 D_80182F14; +extern u8 D_80182FC8; +extern u8 D_80182FA4; +extern u8 D_80182F80; +extern u8 D_80182EF0; +extern void func_80145934(void); +extern u8 D_8018307C; +extern u8 D_80183058; +extern u8 D_80183034; +extern u8 D_80183010; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182474[]; +extern unsigned char D_801824A4[]; +extern unsigned char D_801824F4[]; +extern unsigned char D_80182524[]; +extern unsigned char D_80182554[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801825A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018266C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801826F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199628; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019962C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018272C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801827D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801827E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018280C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182818[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182828[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182840[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182830; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182854[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182870[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182860; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182884[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182898[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801828AC; +extern void (*D_801828D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801828B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182920[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182924[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D88[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182D98[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199660; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182DC0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182DA0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182DB0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182E00[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182E08[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182DD4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182E14[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182DE4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199668; +extern s32 D_80199674; +extern s32 D_80199678; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182E50[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182E24[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199670; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801830A0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182EC0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183144[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183298[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801830B4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801832A0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801830C4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183150[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_801830D4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183150[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801830D4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183150[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801830E4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801830E4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801830E4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801832A8[])(void); + +void func_8015AD3C(void *a0) { + D_801832A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_097/ov_SC03_097_after.c b/src/ov_SC03_097/ov_SC03_097_after.c index 14734aa55..b3f28f019 100644 --- a/src/ov_SC03_097/ov_SC03_097_after.c +++ b/src/ov_SC03_097/ov_SC03_097_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_097/nonmatchings/ov_SC03_097_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187CC0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187CC0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187D00[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187D00[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187D04[])(void); - -void func_80155580(void *a0) { - D_80187D04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187EF8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187EF8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188168 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188168[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188168[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188178[])(void); - -void func_80157544(void *a0) { - D_80188178[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A96E8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A96E8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A96E8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801881A0[])(void); -extern int D_801A96E8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801881A0[*(unsigned short *)((char *)param_1 + 2)](); - D_801A96E8 = D_801A96E8 - 1; - if (D_801A96E8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188180; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188180); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188190; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188190); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801881E0[])(void); - -void func_80157DC4(void *a0) { - D_801881E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801881E8[])(void); - -void func_80157FC4(void *a0) { - D_801881E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801881B4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801881B4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801881F4[])(void); - -void func_8015824C(void *a0) { - D_801881F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801881C4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801881C4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A96F0; -extern s32 D_801A96FC; -extern s32 D_801A9700; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A96F0 = 0; - D_801A96FC = 1; - D_801A9700 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A96F0; -extern s32 D_801A96FC; -extern s32 D_801A9700; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A96F0 = 0; - D_801A96FC = 1; - D_801A9700 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188230[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188230[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A96F0; - -void func_80158BB0(void *arg0) { - if (D_801A96F0 == 0) { - D_801A96F0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A96FC; -extern s32 D_80188204[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A96FC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188204[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A9700; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A9700 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A96F0; -extern s32 D_801A96F8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A96F0 == 4) { - D_801A96F0 = 5; - } - if (D_801A96F8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018826C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018826C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_801594E8); - - -extern void (*D_80188480[])(void); - -void func_80159698(void *a0) { - D_80188480[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801882A0)); - func_80028620(1, &(*(u8 *)&D_801882A0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801882A0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188524[])(void); - -void func_80159968(void *a0) { - D_80188524[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80188678[])(void); - -void func_80159B70(void *a0) { - D_80188678[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188494; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188494); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188680[])(void); - -void func_8015A264(void *a0) { - D_80188680[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801884A4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801884A4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188530[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_801884B4[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188530[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801884B4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188530[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801884C4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801884C4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801884C4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188688[])(void); - -void func_8015AD3C(void *a0) { - D_80188688[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8015444C.c b/src/ov_SC03_097/ov_SC03_097_jr_8015444C.c new file mode 100644 index 000000000..f41aced31 --- /dev/null +++ b/src/ov_SC03_097/ov_SC03_097_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801883CC; +extern u8 D_8018833C; +extern u8 D_80188318; +extern u8 D_801882F4; +extern u8 D_801883A8; +extern u8 D_80188384; +extern u8 D_80188360; +extern u8 D_801882D0; +extern void func_80145934(void); +extern u8 D_8018845C; +extern u8 D_80188438; +extern u8 D_80188414; +extern u8 D_801883F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187854[]; +extern unsigned char D_80187884[]; +extern unsigned char D_801878D4[]; +extern unsigned char D_80187904[]; +extern unsigned char D_80187934[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187984[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A4C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187AD4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187ADC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A96B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A96B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B0C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BB4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187BD8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187BC8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187BEC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187BF8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187C64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187C8C; +extern void (*D_80187CB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187C94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187CC0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187CC0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187D00[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187D00[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187D04[])(void); + +void func_80155580(void *a0) { + D_80187D04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187EF8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187EF8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188168 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188168[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188168[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188178[])(void); + +void func_80157544(void *a0) { + D_80188178[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A96E8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A96E8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A96E8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801881A0[])(void); +extern int D_801A96E8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801881A0[*(unsigned short *)((char *)param_1 + 2)](); + D_801A96E8 = D_801A96E8 - 1; + if (D_801A96E8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188180; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188180); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188190; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188190); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801881E0[])(void); + +void func_80157DC4(void *a0) { + D_801881E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801881E8[])(void); + +void func_80157FC4(void *a0) { + D_801881E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801881B4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801881B4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801881F4[])(void); + +void func_8015824C(void *a0) { + D_801881F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801881C4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801881C4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A96F0; +extern s32 D_801A96FC; +extern s32 D_801A9700; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A96F0 = 0; + D_801A96FC = 1; + D_801A9700 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A96F0; +extern s32 D_801A96FC; +extern s32 D_801A9700; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A96F0 = 0; + D_801A96FC = 1; + D_801A9700 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188230[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188230[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A96F0; + +void func_80158BB0(void *arg0) { + if (D_801A96F0 == 0) { + D_801A96F0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A96FC; +extern s32 D_80188204[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A96FC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188204[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A9700; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A9700 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A96F0; +extern s32 D_801A96F8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A96F0 == 4) { + D_801A96F0 = 5; + } + if (D_801A96F8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018826C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018826C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_801594E8); + + +extern void (*D_80188480[])(void); + +void func_80159698(void *a0) { + D_80188480[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801882A0)); + func_80028620(1, &(*(u8 *)&D_801882A0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801882A0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188524[])(void); + +void func_80159968(void *a0) { + D_80188524[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80188678[])(void); + +void func_80159B70(void *a0) { + D_80188678[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188494; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188494); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188680[])(void); + +void func_8015A264(void *a0) { + D_80188680[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801884A4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801884A4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_097/ov_SC03_097_jr_8015A3C8.c b/src/ov_SC03_097/ov_SC03_097_jr_8015A3C8.c new file mode 100644 index 000000000..9791f55b4 --- /dev/null +++ b/src/ov_SC03_097/ov_SC03_097_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801883CC; +extern u8 D_8018833C; +extern u8 D_80188318; +extern u8 D_801882F4; +extern u8 D_801883A8; +extern u8 D_80188384; +extern u8 D_80188360; +extern u8 D_801882D0; +extern void func_80145934(void); +extern u8 D_8018845C; +extern u8 D_80188438; +extern u8 D_80188414; +extern u8 D_801883F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187854[]; +extern unsigned char D_80187884[]; +extern unsigned char D_801878D4[]; +extern unsigned char D_80187904[]; +extern unsigned char D_80187934[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187984[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187A4C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187AD4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187ADC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A96B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A96B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187B0C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187BB4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187BD8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187BC8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187BEC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187BF8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187C08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187C20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187C10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187C34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187C50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187C40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187C64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187C78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187C8C; +extern void (*D_80187CB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187C94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187D00[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187D04[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188168[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188178[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A96E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801881A0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188180; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188190; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801881E0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801881E8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801881B4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801881F4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801881C4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A96F0; +extern s32 D_801A96FC; +extern s32 D_801A9700; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188230[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188204[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A96F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188480[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801882A0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188524[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188678[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188494; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188680[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801884A4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188530[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_801884B4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188530[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801884B4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188530[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801884C4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801884C4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801884C4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188688[])(void); + +void func_8015AD3C(void *a0) { + D_80188688[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_098/ov_SC03_098_after.c b/src/ov_SC03_098/ov_SC03_098_after.c index 5719bd2f4..92e15ce7d 100644 --- a/src/ov_SC03_098/ov_SC03_098_after.c +++ b/src/ov_SC03_098/ov_SC03_098_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_098/nonmatchings/ov_SC03_098_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018714C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018714C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018718C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018718C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187190[])(void); - -void func_80155580(void *a0) { - D_80187190[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187384[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187384[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801875F4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801875F4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801875F4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187604[])(void); - -void func_80157544(void *a0) { - D_80187604[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C4358; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C4358 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C4358 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018762C[])(void); -extern int D_801C4358; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018762C[*(unsigned short *)((char *)param_1 + 2)](); - D_801C4358 = D_801C4358 - 1; - if (D_801C4358 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018760C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018760C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018761C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018761C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018766C[])(void); - -void func_80157DC4(void *a0) { - D_8018766C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187674[])(void); - -void func_80157FC4(void *a0) { - D_80187674[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187640; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187640); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187680[])(void); - -void func_8015824C(void *a0) { - D_80187680[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187650; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187650); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C4360; -extern s32 D_801C436C; -extern s32 D_801C4370; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C4360 = 0; - D_801C436C = 1; - D_801C4370 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C4360; -extern s32 D_801C436C; -extern s32 D_801C4370; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C4360 = 0; - D_801C436C = 1; - D_801C4370 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801876BC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801876BC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C4360; - -void func_80158BB0(void *arg0) { - if (D_801C4360 == 0) { - D_801C4360 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C436C; -extern s32 D_80187690[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C436C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187690[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C4370; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C4370 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C4360; -extern s32 D_801C4368; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C4360 == 4) { - D_801C4360 = 5; - } - if (D_801C4368 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801876F8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801876F8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_801594E8); - - -extern void (*D_8018790C[])(void); - -void func_80159698(void *a0) { - D_8018790C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018772C)); - func_80028620(1, &(*(u8 *)&D_8018772C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018772C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801879B0[])(void); - -void func_80159968(void *a0) { - D_801879B0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187B04[])(void); - -void func_80159B70(void *a0) { - D_80187B04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187920; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187920); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187B0C[])(void); - -void func_8015A264(void *a0) { - D_80187B0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187930; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187930); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801879BC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80187940; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801879BC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187940); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801879BC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187950 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80187950; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80187950); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187B14[])(void); - -void func_8015AD3C(void *a0) { - D_80187B14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8015444C.c b/src/ov_SC03_098/ov_SC03_098_jr_8015444C.c new file mode 100644 index 000000000..8d8d43603 --- /dev/null +++ b/src/ov_SC03_098/ov_SC03_098_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187858; +extern u8 D_801877C8; +extern u8 D_801877A4; +extern u8 D_80187780; +extern u8 D_80187834; +extern u8 D_80187810; +extern u8 D_801877EC; +extern u8 D_8018775C; +extern void func_80145934(void); +extern u8 D_801878E8; +extern u8 D_801878C4; +extern u8 D_801878A0; +extern u8 D_8018787C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186CE0[]; +extern unsigned char D_80186D10[]; +extern unsigned char D_80186D60[]; +extern unsigned char D_80186D90[]; +extern unsigned char D_80186DC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186E10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186ED8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186F60[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186F68; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4320; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4324; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186F98; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187040[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187064[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187054; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187078[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187084[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187094[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801870AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018709C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801870C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801870DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801870CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801870F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187104[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187118; +extern void (*D_80187140[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187120; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018714C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018714C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018718C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018718C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187190[])(void); + +void func_80155580(void *a0) { + D_80187190[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187384[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187384[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801875F4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801875F4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801875F4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187604[])(void); + +void func_80157544(void *a0) { + D_80187604[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C4358; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C4358 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C4358 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018762C[])(void); +extern int D_801C4358; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018762C[*(unsigned short *)((char *)param_1 + 2)](); + D_801C4358 = D_801C4358 - 1; + if (D_801C4358 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018760C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018760C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018761C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018761C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018766C[])(void); + +void func_80157DC4(void *a0) { + D_8018766C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187674[])(void); + +void func_80157FC4(void *a0) { + D_80187674[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187640; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187640); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187680[])(void); + +void func_8015824C(void *a0) { + D_80187680[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187650; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187650); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C4360; +extern s32 D_801C436C; +extern s32 D_801C4370; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C4360 = 0; + D_801C436C = 1; + D_801C4370 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C4360; +extern s32 D_801C436C; +extern s32 D_801C4370; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C4360 = 0; + D_801C436C = 1; + D_801C4370 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801876BC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801876BC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C4360; + +void func_80158BB0(void *arg0) { + if (D_801C4360 == 0) { + D_801C4360 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C436C; +extern s32 D_80187690[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C436C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187690[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C4370; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C4370 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4360; +extern s32 D_801C4368; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C4360 == 4) { + D_801C4360 = 5; + } + if (D_801C4368 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801876F8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801876F8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_801594E8); + + +extern void (*D_8018790C[])(void); + +void func_80159698(void *a0) { + D_8018790C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018772C)); + func_80028620(1, &(*(u8 *)&D_8018772C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018772C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801879B0[])(void); + +void func_80159968(void *a0) { + D_801879B0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187B04[])(void); + +void func_80159B70(void *a0) { + D_80187B04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187920; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187920); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_098/nonmatchings/ov_SC03_098_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187B0C[])(void); + +void func_8015A264(void *a0) { + D_80187B0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187930; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187930); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_098/ov_SC03_098_jr_8015A3C8.c b/src/ov_SC03_098/ov_SC03_098_jr_8015A3C8.c new file mode 100644 index 000000000..992886766 --- /dev/null +++ b/src/ov_SC03_098/ov_SC03_098_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187858; +extern u8 D_801877C8; +extern u8 D_801877A4; +extern u8 D_80187780; +extern u8 D_80187834; +extern u8 D_80187810; +extern u8 D_801877EC; +extern u8 D_8018775C; +extern void func_80145934(void); +extern u8 D_801878E8; +extern u8 D_801878C4; +extern u8 D_801878A0; +extern u8 D_8018787C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186CE0[]; +extern unsigned char D_80186D10[]; +extern unsigned char D_80186D60[]; +extern unsigned char D_80186D90[]; +extern unsigned char D_80186DC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186E10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186ED8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186F60[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186F68; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C4320; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C4324; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186F98; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187040[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187064[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187054; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187078[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187084[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187094[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801870AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018709C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801870C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801870DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801870CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801870F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187104[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187118; +extern void (*D_80187140[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187120; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018718C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187190[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801875F4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187604[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C4358; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018762C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018760C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018761C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018766C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187674[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187640; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187680[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187650; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C4360; +extern s32 D_801C436C; +extern s32 D_801C4370; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801876BC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187690[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C4368; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018790C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018772C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801879B0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187B04[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187920; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187B0C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187930; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801879BC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187940; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801879BC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187940); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801879BC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187950 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187950; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80187950); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187B14[])(void); + +void func_8015AD3C(void *a0) { + D_80187B14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_099/ov_SC03_099_after.c b/src/ov_SC03_099/ov_SC03_099_after.c index 27ab32378..4333186e4 100644 --- a/src/ov_SC03_099/ov_SC03_099_after.c +++ b/src/ov_SC03_099/ov_SC03_099_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_099/nonmatchings/ov_SC03_099_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018524C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018524C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018528C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018528C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80185290[])(void); - -void func_80155580(void *a0) { - D_80185290[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80185484[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80185484[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801856F4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801856F4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801856F4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80185704[])(void); - -void func_80157544(void *a0) { - D_80185704[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801BE028; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801BE028 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801BE028 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018572C[])(void); -extern int D_801BE028; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018572C[*(unsigned short *)((char *)param_1 + 2)](); - D_801BE028 = D_801BE028 - 1; - if (D_801BE028 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018570C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018570C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018571C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018571C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018576C[])(void); - -void func_80157DC4(void *a0) { - D_8018576C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80185774[])(void); - -void func_80157FC4(void *a0) { - D_80185774[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80185740; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80185740); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80185780[])(void); - -void func_8015824C(void *a0) { - D_80185780[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80185750; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185750); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801BE030; -extern s32 D_801BE03C; -extern s32 D_801BE040; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801BE030 = 0; - D_801BE03C = 1; - D_801BE040 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801BE030; -extern s32 D_801BE03C; -extern s32 D_801BE040; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801BE030 = 0; - D_801BE03C = 1; - D_801BE040 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801857BC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801857BC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801BE030; - -void func_80158BB0(void *arg0) { - if (D_801BE030 == 0) { - D_801BE030 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801BE03C; -extern s32 D_80185790[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801BE03C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185790[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801BE040; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801BE040 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801BE030; -extern s32 D_801BE038; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801BE030 == 4) { - D_801BE030 = 5; - } - if (D_801BE038 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801857F8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801857F8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_801594E8); - - -extern void (*D_80185A0C[])(void); - -void func_80159698(void *a0) { - D_80185A0C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018582C)); - func_80028620(1, &(*(u8 *)&D_8018582C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018582C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185AB0[])(void); - -void func_80159968(void *a0) { - D_80185AB0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185C04[])(void); - -void func_80159B70(void *a0) { - D_80185C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80185A20; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185A20); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80185C0C[])(void); - -void func_8015A264(void *a0) { - D_80185C0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80185A30; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185A30); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185ABC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80185A40; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185ABC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185A40); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185ABC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185A50 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80185A50; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80185A50); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80185C14[])(void); - -void func_8015AD3C(void *a0) { - D_80185C14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8015444C.c b/src/ov_SC03_099/ov_SC03_099_jr_8015444C.c new file mode 100644 index 000000000..59b383534 --- /dev/null +++ b/src/ov_SC03_099/ov_SC03_099_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185958; +extern u8 D_801858C8; +extern u8 D_801858A4; +extern u8 D_80185880; +extern u8 D_80185934; +extern u8 D_80185910; +extern u8 D_801858EC; +extern u8 D_8018585C; +extern void func_80145934(void); +extern u8 D_801859E8; +extern u8 D_801859C4; +extern u8 D_801859A0; +extern u8 D_8018597C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184DE0[]; +extern unsigned char D_80184E10[]; +extern unsigned char D_80184E60[]; +extern unsigned char D_80184E90[]; +extern unsigned char D_80184EC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184F10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184FD8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185060[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185068; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BDFF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BDFF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185098; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185140[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185164[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185154; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185178[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185184[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185194[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801851AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018519C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801851C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801851DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801851CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801851F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185204[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185218; +extern void (*D_80185240[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185220; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018524C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018524C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018528C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018528C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80185290[])(void); + +void func_80155580(void *a0) { + D_80185290[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80185484[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80185484[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801856F4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801856F4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801856F4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80185704[])(void); + +void func_80157544(void *a0) { + D_80185704[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801BE028; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801BE028 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801BE028 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018572C[])(void); +extern int D_801BE028; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018572C[*(unsigned short *)((char *)param_1 + 2)](); + D_801BE028 = D_801BE028 - 1; + if (D_801BE028 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018570C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018570C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018571C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018571C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018576C[])(void); + +void func_80157DC4(void *a0) { + D_8018576C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80185774[])(void); + +void func_80157FC4(void *a0) { + D_80185774[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80185740; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80185740); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80185780[])(void); + +void func_8015824C(void *a0) { + D_80185780[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80185750; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185750); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801BE030; +extern s32 D_801BE03C; +extern s32 D_801BE040; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801BE030 = 0; + D_801BE03C = 1; + D_801BE040 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801BE030; +extern s32 D_801BE03C; +extern s32 D_801BE040; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801BE030 = 0; + D_801BE03C = 1; + D_801BE040 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801857BC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801857BC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801BE030; + +void func_80158BB0(void *arg0) { + if (D_801BE030 == 0) { + D_801BE030 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801BE03C; +extern s32 D_80185790[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801BE03C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185790[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801BE040; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801BE040 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801BE030; +extern s32 D_801BE038; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801BE030 == 4) { + D_801BE030 = 5; + } + if (D_801BE038 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801857F8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801857F8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_801594E8); + + +extern void (*D_80185A0C[])(void); + +void func_80159698(void *a0) { + D_80185A0C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018582C)); + func_80028620(1, &(*(u8 *)&D_8018582C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018582C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185AB0[])(void); + +void func_80159968(void *a0) { + D_80185AB0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185C04[])(void); + +void func_80159B70(void *a0) { + D_80185C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80185A20; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185A20); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_099/nonmatchings/ov_SC03_099_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80185C0C[])(void); + +void func_8015A264(void *a0) { + D_80185C0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80185A30; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185A30); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_099/ov_SC03_099_jr_8015A3C8.c b/src/ov_SC03_099/ov_SC03_099_jr_8015A3C8.c new file mode 100644 index 000000000..3e6deaecf --- /dev/null +++ b/src/ov_SC03_099/ov_SC03_099_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185958; +extern u8 D_801858C8; +extern u8 D_801858A4; +extern u8 D_80185880; +extern u8 D_80185934; +extern u8 D_80185910; +extern u8 D_801858EC; +extern u8 D_8018585C; +extern void func_80145934(void); +extern u8 D_801859E8; +extern u8 D_801859C4; +extern u8 D_801859A0; +extern u8 D_8018597C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184DE0[]; +extern unsigned char D_80184E10[]; +extern unsigned char D_80184E60[]; +extern unsigned char D_80184E90[]; +extern unsigned char D_80184EC0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184F10[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184FD8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185060[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185068; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BDFF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BDFF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185098; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185140[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185164[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185154; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185178[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185184[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185194[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801851AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018519C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801851C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801851DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801851CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801851F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185204[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185218; +extern void (*D_80185240[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185220; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018528C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185290[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801856F4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185704[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BE028; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018572C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018570C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018571C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018576C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185774[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185740; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185780[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185750; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BE030; +extern s32 D_801BE03C; +extern s32 D_801BE040; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801857BC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185790[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BE038; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185A0C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018582C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185AB0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185C04[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185A20; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185C0C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185A30; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185ABC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80185A40; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185ABC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80185A40); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185ABC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185A50 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185A50; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80185A50); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80185C14[])(void); + +void func_8015AD3C(void *a0) { + D_80185C14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_100/ov_SC03_100_after.c b/src/ov_SC03_100/ov_SC03_100_after.c index 96b0723ea..3dc0c2aed 100644 --- a/src/ov_SC03_100/ov_SC03_100_after.c +++ b/src/ov_SC03_100/ov_SC03_100_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_100/nonmatchings/ov_SC03_100_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186718[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186718[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186758[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186758[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018675C[])(void); - -void func_80155580(void *a0) { - D_8018675C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186950[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186950[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186BC0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186BC0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186BC0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186BD0[])(void); - -void func_80157544(void *a0) { - D_80186BD0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C72B0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C72B0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C72B0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186BF8[])(void); -extern int D_801C72B0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186BF8[*(unsigned short *)((char *)param_1 + 2)](); - D_801C72B0 = D_801C72B0 - 1; - if (D_801C72B0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186BD8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186BD8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186BE8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186BE8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186C38[])(void); - -void func_80157DC4(void *a0) { - D_80186C38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186C40[])(void); - -void func_80157FC4(void *a0) { - D_80186C40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186C0C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186C0C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186C4C[])(void); - -void func_8015824C(void *a0) { - D_80186C4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186C1C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186C1C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C72B8; -extern s32 D_801C72C4; -extern s32 D_801C72C8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C72B8 = 0; - D_801C72C4 = 1; - D_801C72C8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C72B8; -extern s32 D_801C72C4; -extern s32 D_801C72C8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C72B8 = 0; - D_801C72C4 = 1; - D_801C72C8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80186C88[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80186C88[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C72B8; - -void func_80158BB0(void *arg0) { - if (D_801C72B8 == 0) { - D_801C72B8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C72C4; -extern s32 D_80186C5C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C72C4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C5C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C72C8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C72C8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C72B8; -extern s32 D_801C72C0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C72B8 == 4) { - D_801C72B8 = 5; - } - if (D_801C72C0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186CC4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186CC4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_801594E8); - - -extern void (*D_80186ED8[])(void); - -void func_80159698(void *a0) { - D_80186ED8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186CF8)); - func_80028620(1, &(*(u8 *)&D_80186CF8) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186CF8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186F7C[])(void); - -void func_80159968(void *a0) { - D_80186F7C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801870D0[])(void); - -void func_80159B70(void *a0) { - D_801870D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186EEC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186EEC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801870D8[])(void); - -void func_8015A264(void *a0) { - D_801870D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186EFC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186EFC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186F88[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80186F0C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186F88[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186F0C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186F88[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186F1C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186F1C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186F1C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801870E0[])(void); - -void func_8015AD3C(void *a0) { - D_801870E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8015444C.c b/src/ov_SC03_100/ov_SC03_100_jr_8015444C.c new file mode 100644 index 000000000..4337b1a49 --- /dev/null +++ b/src/ov_SC03_100/ov_SC03_100_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E24; +extern u8 D_80186D94; +extern u8 D_80186D70; +extern u8 D_80186D4C; +extern u8 D_80186E00; +extern u8 D_80186DDC; +extern u8 D_80186DB8; +extern u8 D_80186D28; +extern void func_80145934(void); +extern u8 D_80186EB4; +extern u8 D_80186E90; +extern u8 D_80186E6C; +extern u8 D_80186E48; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862AC[]; +extern unsigned char D_801862DC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern unsigned char D_8018638C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863DC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864A4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018652C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186534; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C7278; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C727C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186564; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018660C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186630[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186620; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186644[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186650[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186660[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186678[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186668; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866A8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186698; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866BC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866D0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866E4; +extern void (*D_8018670C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866EC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186718[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186718[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186758[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186758[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018675C[])(void); + +void func_80155580(void *a0) { + D_8018675C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186950[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186950[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186BC0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BC0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186BC0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186BD0[])(void); + +void func_80157544(void *a0) { + D_80186BD0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C72B0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C72B0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C72B0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186BF8[])(void); +extern int D_801C72B0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186BF8[*(unsigned short *)((char *)param_1 + 2)](); + D_801C72B0 = D_801C72B0 - 1; + if (D_801C72B0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BD8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186BD8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186BE8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186BE8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186C38[])(void); + +void func_80157DC4(void *a0) { + D_80186C38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186C40[])(void); + +void func_80157FC4(void *a0) { + D_80186C40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186C0C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186C0C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186C4C[])(void); + +void func_8015824C(void *a0) { + D_80186C4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186C1C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186C1C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C72B8; +extern s32 D_801C72C4; +extern s32 D_801C72C8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C72B8 = 0; + D_801C72C4 = 1; + D_801C72C8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C72B8; +extern s32 D_801C72C4; +extern s32 D_801C72C8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C72B8 = 0; + D_801C72C4 = 1; + D_801C72C8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80186C88[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80186C88[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C72B8; + +void func_80158BB0(void *arg0) { + if (D_801C72B8 == 0) { + D_801C72B8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C72C4; +extern s32 D_80186C5C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C72C4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C5C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C72C8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C72C8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C72B8; +extern s32 D_801C72C0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C72B8 == 4) { + D_801C72B8 = 5; + } + if (D_801C72C0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186CC4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186CC4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_801594E8); + + +extern void (*D_80186ED8[])(void); + +void func_80159698(void *a0) { + D_80186ED8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186CF8)); + func_80028620(1, &(*(u8 *)&D_80186CF8) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186CF8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186F7C[])(void); + +void func_80159968(void *a0) { + D_80186F7C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801870D0[])(void); + +void func_80159B70(void *a0) { + D_801870D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186EEC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186EEC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801870D8[])(void); + +void func_8015A264(void *a0) { + D_801870D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186EFC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186EFC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_100/ov_SC03_100_jr_8015A3C8.c b/src/ov_SC03_100/ov_SC03_100_jr_8015A3C8.c new file mode 100644 index 000000000..4980f3f0f --- /dev/null +++ b/src/ov_SC03_100/ov_SC03_100_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E24; +extern u8 D_80186D94; +extern u8 D_80186D70; +extern u8 D_80186D4C; +extern u8 D_80186E00; +extern u8 D_80186DDC; +extern u8 D_80186DB8; +extern u8 D_80186D28; +extern void func_80145934(void); +extern u8 D_80186EB4; +extern u8 D_80186E90; +extern u8 D_80186E6C; +extern u8 D_80186E48; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862AC[]; +extern unsigned char D_801862DC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern unsigned char D_8018638C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863DC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864A4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018652C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186534; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C7278; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C727C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186564; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018660C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186630[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186620; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186644[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186650[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186660[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186678[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186668; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866A8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186698; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866BC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866D0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866E4; +extern void (*D_8018670C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866EC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186758[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018675C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BC0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186BD0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C72B0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186BF8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BD8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186BE8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C38[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C40[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186C0C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C4C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186C1C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C72B8; +extern s32 D_801C72C4; +extern s32 D_801C72C8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186C88[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C5C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C72C0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186ED8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186CF8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186F7C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801870D0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186EEC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801870D8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186EFC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186F88[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80186F0C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186F88[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186F0C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186F88[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186F1C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186F1C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186F1C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801870E0[])(void); + +void func_8015AD3C(void *a0) { + D_801870E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_101/ov_SC03_101_after.c b/src/ov_SC03_101/ov_SC03_101_after.c index aeb9016c3..03e1ab095 100644 --- a/src/ov_SC03_101/ov_SC03_101_after.c +++ b/src/ov_SC03_101/ov_SC03_101_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_101/nonmatchings/ov_SC03_101_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801856F4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801856F4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80185734[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80185734[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80185738[])(void); - -void func_80155580(void *a0) { - D_80185738[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018592C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018592C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185B9C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80185B9C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80185B9C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80185BAC[])(void); - -void func_80157544(void *a0) { - D_80185BAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019CB78; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019CB78 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019CB78 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80185BD4[])(void); -extern int D_8019CB78; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80185BD4[*(unsigned short *)((char *)param_1 + 2)](); - D_8019CB78 = D_8019CB78 - 1; - if (D_8019CB78 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80185BB4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185BB4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80185BC4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185BC4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80185C14[])(void); - -void func_80157DC4(void *a0) { - D_80185C14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80185C1C[])(void); - -void func_80157FC4(void *a0) { - D_80185C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80185BE8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80185BE8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80185C28[])(void); - -void func_8015824C(void *a0) { - D_80185C28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80185BF8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185BF8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019CB80; -extern s32 D_8019CB8C; -extern s32 D_8019CB90; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019CB80 = 0; - D_8019CB8C = 1; - D_8019CB90 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019CB80; -extern s32 D_8019CB8C; -extern s32 D_8019CB90; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019CB80 = 0; - D_8019CB8C = 1; - D_8019CB90 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80185C64[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80185C64[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019CB80; - -void func_80158BB0(void *arg0) { - if (D_8019CB80 == 0) { - D_8019CB80 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019CB8C; -extern s32 D_80185C38[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019CB8C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185C38[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019CB90; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019CB90 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019CB80; -extern s32 D_8019CB88; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019CB80 == 4) { - D_8019CB80 = 5; - } - if (D_8019CB88 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80185CA0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80185CA0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_801594E8); - - -extern void (*D_80185EB4[])(void); - -void func_80159698(void *a0) { - D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80185CD4)); - func_80028620(1, &(*(u8 *)&D_80185CD4) + 0x10); - func_80028620(2, &(*(u8 *)&D_80185CD4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185F58[])(void); - -void func_80159968(void *a0) { - D_80185F58[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801860AC[])(void); - -void func_80159B70(void *a0) { - D_801860AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80185EC8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185EC8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801860B4[])(void); - -void func_8015A264(void *a0) { - D_801860B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80185ED8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185ED8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185F64[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_80185EE8[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185F64[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185EE8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185F64[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185EF8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80185EF8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80185EF8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801860BC[])(void); - -void func_8015AD3C(void *a0) { - D_801860BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8015444C.c b/src/ov_SC03_101/ov_SC03_101_jr_8015444C.c new file mode 100644 index 000000000..6fd90e39c --- /dev/null +++ b/src/ov_SC03_101/ov_SC03_101_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185E00; +extern u8 D_80185D70; +extern u8 D_80185D4C; +extern u8 D_80185D28; +extern u8 D_80185DDC; +extern u8 D_80185DB8; +extern u8 D_80185D94; +extern u8 D_80185D04; +extern void func_80145934(void); +extern u8 D_80185E90; +extern u8 D_80185E6C; +extern u8 D_80185E48; +extern u8 D_80185E24; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185288[]; +extern unsigned char D_801852B8[]; +extern unsigned char D_80185308[]; +extern unsigned char D_80185338[]; +extern unsigned char D_80185368[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801853B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185480[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185508[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185510; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CB40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CB44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185540; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801855E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018560C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801855FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185620[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018562C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018563C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185654[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185644; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185668[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185684[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185674; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185698[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801856AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801856C0; +extern void (*D_801856E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801856C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801856F4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801856F4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80185734[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80185734[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80185738[])(void); + +void func_80155580(void *a0) { + D_80185738[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018592C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018592C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185B9C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B9C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80185B9C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80185BAC[])(void); + +void func_80157544(void *a0) { + D_80185BAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019CB78; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019CB78 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019CB78 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80185BD4[])(void); +extern int D_8019CB78; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80185BD4[*(unsigned short *)((char *)param_1 + 2)](); + D_8019CB78 = D_8019CB78 - 1; + if (D_8019CB78 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185BB4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185BB4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80185BC4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185BC4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80185C14[])(void); + +void func_80157DC4(void *a0) { + D_80185C14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80185C1C[])(void); + +void func_80157FC4(void *a0) { + D_80185C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80185BE8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80185BE8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80185C28[])(void); + +void func_8015824C(void *a0) { + D_80185C28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80185BF8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185BF8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019CB80; +extern s32 D_8019CB8C; +extern s32 D_8019CB90; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019CB80 = 0; + D_8019CB8C = 1; + D_8019CB90 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019CB80; +extern s32 D_8019CB8C; +extern s32 D_8019CB90; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019CB80 = 0; + D_8019CB8C = 1; + D_8019CB90 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80185C64[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80185C64[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019CB80; + +void func_80158BB0(void *arg0) { + if (D_8019CB80 == 0) { + D_8019CB80 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019CB8C; +extern s32 D_80185C38[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019CB8C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185C38[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019CB90; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019CB90 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CB80; +extern s32 D_8019CB88; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019CB80 == 4) { + D_8019CB80 = 5; + } + if (D_8019CB88 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80185CA0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80185CA0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_801594E8); + + +extern void (*D_80185EB4[])(void); + +void func_80159698(void *a0) { + D_80185EB4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80185CD4)); + func_80028620(1, &(*(u8 *)&D_80185CD4) + 0x10); + func_80028620(2, &(*(u8 *)&D_80185CD4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185F58[])(void); + +void func_80159968(void *a0) { + D_80185F58[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801860AC[])(void); + +void func_80159B70(void *a0) { + D_801860AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80185EC8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185EC8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801860B4[])(void); + +void func_8015A264(void *a0) { + D_801860B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80185ED8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185ED8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8015A3C8.c b/src/ov_SC03_101/ov_SC03_101_jr_8015A3C8.c new file mode 100644 index 000000000..ae19f6ece --- /dev/null +++ b/src/ov_SC03_101/ov_SC03_101_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185E00; +extern u8 D_80185D70; +extern u8 D_80185D4C; +extern u8 D_80185D28; +extern u8 D_80185DDC; +extern u8 D_80185DB8; +extern u8 D_80185D94; +extern u8 D_80185D04; +extern void func_80145934(void); +extern u8 D_80185E90; +extern u8 D_80185E6C; +extern u8 D_80185E48; +extern u8 D_80185E24; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185288[]; +extern unsigned char D_801852B8[]; +extern unsigned char D_80185308[]; +extern unsigned char D_80185338[]; +extern unsigned char D_80185368[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801853B8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185480[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185508[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185510; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CB40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CB44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185540; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801855E8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018560C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801855FC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185620[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018562C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018563C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185654[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185644; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185668[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185684[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185674; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185698[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801856AC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801856C0; +extern void (*D_801856E8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801856C8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185734[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185738[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185B9C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185BAC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019CB78; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185BD4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185BB4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185BC4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185C14[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80185C1C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80185BE8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185C28[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185BF8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019CB80; +extern s32 D_8019CB8C; +extern s32 D_8019CB90; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185C64[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185C38[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CB88; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185EB4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185CD4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185F58[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801860AC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185EC8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801860B4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185ED8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185F64[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80185EE8[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185F64[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80185EE8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185F64[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185EF8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185EF8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80185EF8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801860BC[])(void); + +void func_8015AD3C(void *a0) { + D_801860BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_102/ov_SC03_102_after.c b/src/ov_SC03_102/ov_SC03_102_after.c index da3b0be77..30e900377 100644 --- a/src/ov_SC03_102/ov_SC03_102_after.c +++ b/src/ov_SC03_102/ov_SC03_102_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_102/nonmatchings/ov_SC03_102_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187FAC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187FAC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187FEC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187FEC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187FF0[])(void); - -void func_80155580(void *a0) { - D_80187FF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801881E4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801881E4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188454 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188454[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188454[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188464[])(void); - -void func_80157544(void *a0) { - D_80188464[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B87F0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B87F0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B87F0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018848C[])(void); -extern int D_801B87F0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018848C[*(unsigned short *)((char *)param_1 + 2)](); - D_801B87F0 = D_801B87F0 - 1; - if (D_801B87F0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018846C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018846C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018847C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018847C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801884CC[])(void); - -void func_80157DC4(void *a0) { - D_801884CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801884D4[])(void); - -void func_80157FC4(void *a0) { - D_801884D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801884A0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801884A0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801884E0[])(void); - -void func_8015824C(void *a0) { - D_801884E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801884B0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801884B0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B87F8; -extern s32 D_801B8804; -extern s32 D_801B8808; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B87F8 = 0; - D_801B8804 = 1; - D_801B8808 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B87F8; -extern s32 D_801B8804; -extern s32 D_801B8808; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B87F8 = 0; - D_801B8804 = 1; - D_801B8808 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018851C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018851C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B87F8; - -void func_80158BB0(void *arg0) { - if (D_801B87F8 == 0) { - D_801B87F8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B8804; -extern s32 D_801884F0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B8804; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801884F0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B8808; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B8808 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B87F8; -extern s32 D_801B8800; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B87F8 == 4) { - D_801B87F8 = 5; - } - if (D_801B8800 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80188558[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80188558; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_801594E8); - - -extern void (*D_8018876C[])(void); - -void func_80159698(void *a0) { - D_8018876C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018858C)); - func_80028620(1, &(*(u8 *)&D_8018858C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018858C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188810[])(void); - -void func_80159968(void *a0) { - D_80188810[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80188964[])(void); - -void func_80159B70(void *a0) { - D_80188964[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188780; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188780); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018896C[])(void); - -void func_8015A264(void *a0) { - D_8018896C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80188790; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188790); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018881C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801887A0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018881C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801887A0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018881C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801887B0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801887B0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801887B0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188974[])(void); - -void func_8015AD3C(void *a0) { - D_80188974[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8015444C.c b/src/ov_SC03_102/ov_SC03_102_jr_8015444C.c new file mode 100644 index 000000000..ead24b235 --- /dev/null +++ b/src/ov_SC03_102/ov_SC03_102_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801886B8; +extern u8 D_80188628; +extern u8 D_80188604; +extern u8 D_801885E0; +extern u8 D_80188694; +extern u8 D_80188670; +extern u8 D_8018864C; +extern u8 D_801885BC; +extern void func_80145934(void); +extern u8 D_80188748; +extern u8 D_80188724; +extern u8 D_80188700; +extern u8 D_801886DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187B40[]; +extern unsigned char D_80187B70[]; +extern unsigned char D_80187BC0[]; +extern unsigned char D_80187BF0[]; +extern unsigned char D_80187C20[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C70[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187D38[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187DC0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187DC8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B87B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B87BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187DF8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187EA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187EC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187EB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187EE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187EF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187F0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187EFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187F20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187F3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187F2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187F50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F78; +extern void (*D_80187FA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187FAC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187FAC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187FEC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187FEC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187FF0[])(void); + +void func_80155580(void *a0) { + D_80187FF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801881E4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801881E4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188454 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188454[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188454[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188464[])(void); + +void func_80157544(void *a0) { + D_80188464[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B87F0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B87F0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B87F0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018848C[])(void); +extern int D_801B87F0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018848C[*(unsigned short *)((char *)param_1 + 2)](); + D_801B87F0 = D_801B87F0 - 1; + if (D_801B87F0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018846C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018846C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018847C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018847C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801884CC[])(void); + +void func_80157DC4(void *a0) { + D_801884CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801884D4[])(void); + +void func_80157FC4(void *a0) { + D_801884D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801884A0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801884A0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801884E0[])(void); + +void func_8015824C(void *a0) { + D_801884E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801884B0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801884B0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B87F8; +extern s32 D_801B8804; +extern s32 D_801B8808; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B87F8 = 0; + D_801B8804 = 1; + D_801B8808 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B87F8; +extern s32 D_801B8804; +extern s32 D_801B8808; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B87F8 = 0; + D_801B8804 = 1; + D_801B8808 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018851C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018851C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B87F8; + +void func_80158BB0(void *arg0) { + if (D_801B87F8 == 0) { + D_801B87F8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B8804; +extern s32 D_801884F0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B8804; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801884F0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B8808; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B8808 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B87F8; +extern s32 D_801B8800; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B87F8 == 4) { + D_801B87F8 = 5; + } + if (D_801B8800 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80188558[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80188558; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_801594E8); + + +extern void (*D_8018876C[])(void); + +void func_80159698(void *a0) { + D_8018876C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018858C)); + func_80028620(1, &(*(u8 *)&D_8018858C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018858C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188810[])(void); + +void func_80159968(void *a0) { + D_80188810[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80188964[])(void); + +void func_80159B70(void *a0) { + D_80188964[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188780; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188780); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018896C[])(void); + +void func_8015A264(void *a0) { + D_8018896C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80188790; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188790); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_102/ov_SC03_102_jr_8015A3C8.c b/src/ov_SC03_102/ov_SC03_102_jr_8015A3C8.c new file mode 100644 index 000000000..c238976d1 --- /dev/null +++ b/src/ov_SC03_102/ov_SC03_102_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801886B8; +extern u8 D_80188628; +extern u8 D_80188604; +extern u8 D_801885E0; +extern u8 D_80188694; +extern u8 D_80188670; +extern u8 D_8018864C; +extern u8 D_801885BC; +extern void func_80145934(void); +extern u8 D_80188748; +extern u8 D_80188724; +extern u8 D_80188700; +extern u8 D_801886DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187B40[]; +extern unsigned char D_80187B70[]; +extern unsigned char D_80187BC0[]; +extern unsigned char D_80187BF0[]; +extern unsigned char D_80187C20[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187C70[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187D38[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187DC0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187DC8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B87B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B87BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187DF8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187EA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187EC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187EB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187EE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187EF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187F0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187EFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187F20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187F3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187F2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187F50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187F64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187F78; +extern void (*D_80187FA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187F80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187FEC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187FF0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188454[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188464[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B87F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018848C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018846C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018847C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801884CC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801884D4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801884A0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801884E0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801884B0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B87F8; +extern s32 D_801B8804; +extern s32 D_801B8808; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018851C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801884F0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8800; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018876C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018858C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188810[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188964[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188780; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018896C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188790; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018881C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801887A0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018881C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801887A0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018881C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801887B0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801887B0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801887B0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188974[])(void); + +void func_8015AD3C(void *a0) { + D_80188974[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_103/ov_SC03_103_after.c b/src/ov_SC03_103/ov_SC03_103_after.c index 0d88709f8..1f8f88c0c 100644 --- a/src/ov_SC03_103/ov_SC03_103_after.c +++ b/src/ov_SC03_103/ov_SC03_103_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_103/nonmatchings/ov_SC03_103_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80185F5C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80185F5C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80185F9C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80185F9C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80185FA0[])(void); - -void func_80155580(void *a0) { - D_80185FA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186194[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186194[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186404 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186404[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186404[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186414[])(void); - -void func_80157544(void *a0) { - D_80186414[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C39A8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C39A8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C39A8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018643C[])(void); -extern int D_801C39A8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018643C[*(unsigned short *)((char *)param_1 + 2)](); - D_801C39A8 = D_801C39A8 - 1; - if (D_801C39A8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018641C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018641C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018642C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018642C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018647C[])(void); - -void func_80157DC4(void *a0) { - D_8018647C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186484[])(void); - -void func_80157FC4(void *a0) { - D_80186484[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186450; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186450); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186490[])(void); - -void func_8015824C(void *a0) { - D_80186490[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186460; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186460); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C39B0; -extern s32 D_801C39BC; -extern s32 D_801C39C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C39B0 = 0; - D_801C39BC = 1; - D_801C39C0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C39B0; -extern s32 D_801C39BC; -extern s32 D_801C39C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C39B0 = 0; - D_801C39BC = 1; - D_801C39C0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801864CC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801864CC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C39B0; - -void func_80158BB0(void *arg0) { - if (D_801C39B0 == 0) { - D_801C39B0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C39BC; -extern s32 D_801864A0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C39BC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801864A0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C39C0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C39C0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C39B0; -extern s32 D_801C39B8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C39B0 == 4) { - D_801C39B0 = 5; - } - if (D_801C39B8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186508[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186508; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_801594E8); - - -extern void (*D_8018671C[])(void); - -void func_80159698(void *a0) { - D_8018671C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018653C)); - func_80028620(1, &(*(u8 *)&D_8018653C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018653C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801867C0[])(void); - -void func_80159968(void *a0) { - D_801867C0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186914[])(void); - -void func_80159B70(void *a0) { - D_80186914[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186730; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186730); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018691C[])(void); - -void func_8015A264(void *a0) { - D_8018691C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186740; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186740); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801867CC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_80186750[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801867CC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186750)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801867CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186760 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186760; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186760); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186924[])(void); - -void func_8015AD3C(void *a0) { - D_80186924[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8015444C.c b/src/ov_SC03_103/ov_SC03_103_jr_8015444C.c new file mode 100644 index 000000000..45a546bc3 --- /dev/null +++ b/src/ov_SC03_103/ov_SC03_103_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186668; +extern u8 D_801865D8; +extern u8 D_801865B4; +extern u8 D_80186590; +extern u8 D_80186644; +extern u8 D_80186620; +extern u8 D_801865FC; +extern u8 D_8018656C; +extern void func_80145934(void); +extern u8 D_801866F8; +extern u8 D_801866D4; +extern u8 D_801866B0; +extern u8 D_8018668C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185AF0[]; +extern unsigned char D_80185B20[]; +extern unsigned char D_80185B70[]; +extern unsigned char D_80185BA0[]; +extern unsigned char D_80185BD0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185C20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185CE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185D70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185D78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C3970; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C3974; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185DA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185E50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185E74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185E64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185E88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185E94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185EA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185EBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185EAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185ED0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185EEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185EDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185F00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185F14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185F28; +extern void (*D_80185F50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185F30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80185F5C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80185F5C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80185F9C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80185F9C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80185FA0[])(void); + +void func_80155580(void *a0) { + D_80185FA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186194[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186194[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186404 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186404[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186404[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186414[])(void); + +void func_80157544(void *a0) { + D_80186414[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C39A8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C39A8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C39A8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018643C[])(void); +extern int D_801C39A8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018643C[*(unsigned short *)((char *)param_1 + 2)](); + D_801C39A8 = D_801C39A8 - 1; + if (D_801C39A8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018641C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018641C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018642C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018642C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018647C[])(void); + +void func_80157DC4(void *a0) { + D_8018647C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186484[])(void); + +void func_80157FC4(void *a0) { + D_80186484[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186450; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186450); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186490[])(void); + +void func_8015824C(void *a0) { + D_80186490[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186460; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186460); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C39B0; +extern s32 D_801C39BC; +extern s32 D_801C39C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C39B0 = 0; + D_801C39BC = 1; + D_801C39C0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C39B0; +extern s32 D_801C39BC; +extern s32 D_801C39C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C39B0 = 0; + D_801C39BC = 1; + D_801C39C0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801864CC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801864CC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C39B0; + +void func_80158BB0(void *arg0) { + if (D_801C39B0 == 0) { + D_801C39B0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C39BC; +extern s32 D_801864A0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C39BC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801864A0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C39C0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C39C0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C39B0; +extern s32 D_801C39B8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C39B0 == 4) { + D_801C39B0 = 5; + } + if (D_801C39B8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186508[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186508; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_801594E8); + + +extern void (*D_8018671C[])(void); + +void func_80159698(void *a0) { + D_8018671C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018653C)); + func_80028620(1, &(*(u8 *)&D_8018653C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018653C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801867C0[])(void); + +void func_80159968(void *a0) { + D_801867C0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186914[])(void); + +void func_80159B70(void *a0) { + D_80186914[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186730; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186730); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018691C[])(void); + +void func_8015A264(void *a0) { + D_8018691C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186740; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186740); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8015A3C8.c b/src/ov_SC03_103/ov_SC03_103_jr_8015A3C8.c new file mode 100644 index 000000000..c251fde9f --- /dev/null +++ b/src/ov_SC03_103/ov_SC03_103_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186668; +extern u8 D_801865D8; +extern u8 D_801865B4; +extern u8 D_80186590; +extern u8 D_80186644; +extern u8 D_80186620; +extern u8 D_801865FC; +extern u8 D_8018656C; +extern void func_80145934(void); +extern u8 D_801866F8; +extern u8 D_801866D4; +extern u8 D_801866B0; +extern u8 D_8018668C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185AF0[]; +extern unsigned char D_80185B20[]; +extern unsigned char D_80185B70[]; +extern unsigned char D_80185BA0[]; +extern unsigned char D_80185BD0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185C20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185CE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80185D70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80185D78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C3970; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C3974; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80185DA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185E50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185E74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185E64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185E88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185E94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185EA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185EBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185EAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185ED0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185EEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185EDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185F00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185F14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185F28; +extern void (*D_80185F50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185F30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185F9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185FA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186404[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186414[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C39A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018643C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018641C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018642C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018647C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186484[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186450; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186490[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186460; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C39B0; +extern s32 D_801C39BC; +extern s32 D_801C39C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801864CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801864A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C39B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018671C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018653C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801867C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186914[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186730; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018691C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186740; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801867CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80186750[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801867CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186750)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801867CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186760 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186760; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186760); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186924[])(void); + +void func_8015AD3C(void *a0) { + D_80186924[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_104/ov_SC03_104_after.c b/src/ov_SC03_104/ov_SC03_104_after.c index 3d8ff3882..339f0bb4c 100644 --- a/src/ov_SC03_104/ov_SC03_104_after.c +++ b/src/ov_SC03_104/ov_SC03_104_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_104/nonmatchings/ov_SC03_104_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018CAEC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018CAEC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018CB2C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018CB2C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018CB30[])(void); - -void func_80155580(void *a0) { - D_8018CB30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018CD24[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018CD24[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CF94 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018CF94[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018CF94[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018CFA4[])(void); - -void func_80157544(void *a0) { - D_8018CFA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801BEF40; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801BEF40 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801BEF40 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018CFCC[])(void); -extern int D_801BEF40; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018CFCC[*(unsigned short *)((char *)param_1 + 2)](); - D_801BEF40 = D_801BEF40 - 1; - if (D_801BEF40 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018CFAC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CFAC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018CFBC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CFBC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018D00C[])(void); - -void func_80157DC4(void *a0) { - D_8018D00C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018D014[])(void); - -void func_80157FC4(void *a0) { - D_8018D014[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018CFE0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018CFE0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018D020[])(void); - -void func_8015824C(void *a0) { - D_8018D020[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018CFF0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CFF0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801BEF48; -extern s32 D_801BEF54; -extern s32 D_801BEF58; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801BEF48 = 0; - D_801BEF54 = 1; - D_801BEF58 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801BEF48; -extern s32 D_801BEF54; -extern s32 D_801BEF58; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801BEF48 = 0; - D_801BEF54 = 1; - D_801BEF58 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018D05C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018D05C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801BEF48; - -void func_80158BB0(void *arg0) { - if (D_801BEF48 == 0) { - D_801BEF48 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801BEF54; -extern s32 D_8018D030[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801BEF54; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D030[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801BEF58; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801BEF58 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801BEF48; -extern s32 D_801BEF50; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801BEF48 == 4) { - D_801BEF48 = 5; - } - if (D_801BEF50 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018D098[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018D098; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_801594E8); - - -extern void (*D_8018D2AC[])(void); - -void func_80159698(void *a0) { - D_8018D2AC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018D0CC)); - func_80028620(1, &(*(u8 *)&D_8018D0CC) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018D0CC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018D350[])(void); - -void func_80159968(void *a0) { - D_8018D350[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018D4A4[])(void); - -void func_80159B70(void *a0) { - D_8018D4A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018D2C0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D2C0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018D4AC[])(void); - -void func_8015A264(void *a0) { - D_8018D4AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018D2D0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D2D0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018D35C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018D2E0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018D35C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D2E0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018D35C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D2F0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018D2F0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018D2F0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018D4B4[])(void); - -void func_8015AD3C(void *a0) { - D_8018D4B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8015444C.c b/src/ov_SC03_104/ov_SC03_104_jr_8015444C.c new file mode 100644 index 000000000..e5407f820 --- /dev/null +++ b/src/ov_SC03_104/ov_SC03_104_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D1F8; +extern u8 D_8018D168; +extern u8 D_8018D144; +extern u8 D_8018D120; +extern u8 D_8018D1D4; +extern u8 D_8018D1B0; +extern u8 D_8018D18C; +extern u8 D_8018D0FC; +extern void func_80145934(void); +extern u8 D_8018D288; +extern u8 D_8018D264; +extern u8 D_8018D240; +extern u8 D_8018D21C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C680[]; +extern unsigned char D_8018C6B0[]; +extern unsigned char D_8018C700[]; +extern unsigned char D_8018C730[]; +extern unsigned char D_8018C760[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C7B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C878[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C900[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C908; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BEF08; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BEF0C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C938; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C9E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CA04[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C9F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CA18[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CA24[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CA34[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CA4C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CA3C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CA60[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CA7C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CA6C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018CA90[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018CAA4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018CAB8; +extern void (*D_8018CAE0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018CAC0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018CAEC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018CAEC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018CB2C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018CB2C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018CB30[])(void); + +void func_80155580(void *a0) { + D_8018CB30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018CD24[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018CD24[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CF94 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CF94[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018CF94[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018CFA4[])(void); + +void func_80157544(void *a0) { + D_8018CFA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801BEF40; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801BEF40 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801BEF40 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018CFCC[])(void); +extern int D_801BEF40; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018CFCC[*(unsigned short *)((char *)param_1 + 2)](); + D_801BEF40 = D_801BEF40 - 1; + if (D_801BEF40 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CFAC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CFAC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018CFBC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CFBC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018D00C[])(void); + +void func_80157DC4(void *a0) { + D_8018D00C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018D014[])(void); + +void func_80157FC4(void *a0) { + D_8018D014[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018CFE0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018CFE0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018D020[])(void); + +void func_8015824C(void *a0) { + D_8018D020[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018CFF0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CFF0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801BEF48; +extern s32 D_801BEF54; +extern s32 D_801BEF58; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801BEF48 = 0; + D_801BEF54 = 1; + D_801BEF58 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801BEF48; +extern s32 D_801BEF54; +extern s32 D_801BEF58; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801BEF48 = 0; + D_801BEF54 = 1; + D_801BEF58 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018D05C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018D05C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801BEF48; + +void func_80158BB0(void *arg0) { + if (D_801BEF48 == 0) { + D_801BEF48 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801BEF54; +extern s32 D_8018D030[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801BEF54; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018D030[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801BEF58; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801BEF58 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801BEF48; +extern s32 D_801BEF50; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801BEF48 == 4) { + D_801BEF48 = 5; + } + if (D_801BEF50 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018D098[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018D098; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_801594E8); + + +extern void (*D_8018D2AC[])(void); + +void func_80159698(void *a0) { + D_8018D2AC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018D0CC)); + func_80028620(1, &(*(u8 *)&D_8018D0CC) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018D0CC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018D350[])(void); + +void func_80159968(void *a0) { + D_8018D350[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018D4A4[])(void); + +void func_80159B70(void *a0) { + D_8018D4A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018D2C0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D2C0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_104/nonmatchings/ov_SC03_104_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018D4AC[])(void); + +void func_8015A264(void *a0) { + D_8018D4AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018D2D0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D2D0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_104/ov_SC03_104_jr_8015A3C8.c b/src/ov_SC03_104/ov_SC03_104_jr_8015A3C8.c new file mode 100644 index 000000000..6b73bef59 --- /dev/null +++ b/src/ov_SC03_104/ov_SC03_104_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D1F8; +extern u8 D_8018D168; +extern u8 D_8018D144; +extern u8 D_8018D120; +extern u8 D_8018D1D4; +extern u8 D_8018D1B0; +extern u8 D_8018D18C; +extern u8 D_8018D0FC; +extern void func_80145934(void); +extern u8 D_8018D288; +extern u8 D_8018D264; +extern u8 D_8018D240; +extern u8 D_8018D21C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C680[]; +extern unsigned char D_8018C6B0[]; +extern unsigned char D_8018C700[]; +extern unsigned char D_8018C730[]; +extern unsigned char D_8018C760[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C7B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C878[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C900[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C908; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BEF08; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BEF0C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C938; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C9E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018CA04[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C9F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018CA18[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018CA24[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018CA34[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018CA4C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018CA3C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018CA60[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018CA7C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018CA6C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018CA90[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018CAA4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018CAB8; +extern void (*D_8018CAE0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018CAC0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CB2C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CB30[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CF94[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CFA4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BEF40; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CFCC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CFAC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CFBC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018D00C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018D014[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CFE0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018D020[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CFF0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BEF48; +extern s32 D_801BEF54; +extern s32 D_801BEF58; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018D05C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018D030[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BEF50; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D2AC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018D0CC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D350[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D4A4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D2C0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D4AC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D2D0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D35C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D2E0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D35C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D2E0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D35C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D2F0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D2F0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018D2F0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018D4B4[])(void); + +void func_8015AD3C(void *a0) { + D_8018D4B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_105/ov_SC03_105_after.c b/src/ov_SC03_105/ov_SC03_105_after.c index 0abd28dc2..463e55950 100644 --- a/src/ov_SC03_105/ov_SC03_105_after.c +++ b/src/ov_SC03_105/ov_SC03_105_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_105/nonmatchings/ov_SC03_105_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018C174[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018C174[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018C1B4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018C1B4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018C1B8[])(void); - -void func_80155580(void *a0) { - D_8018C1B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018C3AC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018C3AC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018C61C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018C61C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018C61C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018C62C[])(void); - -void func_80157544(void *a0) { - D_8018C62C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B84D0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B84D0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B84D0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018C654[])(void); -extern int D_801B84D0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018C654[*(unsigned short *)((char *)param_1 + 2)](); - D_801B84D0 = D_801B84D0 - 1; - if (D_801B84D0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018C634; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018C634); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018C644; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018C644); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018C694[])(void); - -void func_80157DC4(void *a0) { - D_8018C694[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018C69C[])(void); - -void func_80157FC4(void *a0) { - D_8018C69C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018C668; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018C668); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018C6A8[])(void); - -void func_8015824C(void *a0) { - D_8018C6A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018C678; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018C678); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B84D8; -extern s32 D_801B84E4; -extern s32 D_801B84E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B84D8 = 0; - D_801B84E4 = 1; - D_801B84E8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B84D8; -extern s32 D_801B84E4; -extern s32 D_801B84E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B84D8 = 0; - D_801B84E4 = 1; - D_801B84E8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018C6E4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018C6E4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B84D8; - -void func_80158BB0(void *arg0) { - if (D_801B84D8 == 0) { - D_801B84D8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B84E4; -extern s32 D_8018C6B8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B84E4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018C6B8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B84E8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B84E8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B84D8; -extern s32 D_801B84E0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B84D8 == 4) { - D_801B84D8 = 5; - } - if (D_801B84E0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018C720[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018C720; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_801594E8); - - -extern void (*D_8018C934[])(void); - -void func_80159698(void *a0) { - D_8018C934[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018C754)); - func_80028620(1, &(*(u8 *)&D_8018C754) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018C754) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018C9D8[])(void); - -void func_80159968(void *a0) { - D_8018C9D8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018CB2C[])(void); - -void func_80159B70(void *a0) { - D_8018CB2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018C948; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018C948); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018CB34[])(void); - -void func_8015A264(void *a0) { - D_8018CB34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018C958; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018C958); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018C9E4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018C968; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018C968); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018C9E4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018C978 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018C978; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018C978); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018CB3C[])(void); - -void func_8015AD3C(void *a0) { - D_8018CB3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8015444C.c b/src/ov_SC03_105/ov_SC03_105_jr_8015444C.c new file mode 100644 index 000000000..bfa23c80c --- /dev/null +++ b/src/ov_SC03_105/ov_SC03_105_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018C880; +extern u8 D_8018C7F0; +extern u8 D_8018C7CC; +extern u8 D_8018C7A8; +extern u8 D_8018C85C; +extern u8 D_8018C838; +extern u8 D_8018C814; +extern u8 D_8018C784; +extern void func_80145934(void); +extern u8 D_8018C910; +extern u8 D_8018C8EC; +extern u8 D_8018C8C8; +extern u8 D_8018C8A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BD08[]; +extern unsigned char D_8018BD38[]; +extern unsigned char D_8018BD88[]; +extern unsigned char D_8018BDB8[]; +extern unsigned char D_8018BDE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BE38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018BF00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018BF88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018BF90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8498; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B849C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018BFC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C068[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C08C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C07C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C0A0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C0AC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C0BC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C0D4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C0C4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C0E8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C104[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C0F4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C118[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C12C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C140; +extern void (*D_8018C168[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C148; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018C174[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018C174[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018C1B4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018C1B4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018C1B8[])(void); + +void func_80155580(void *a0) { + D_8018C1B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018C3AC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018C3AC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018C61C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C61C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018C61C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018C62C[])(void); + +void func_80157544(void *a0) { + D_8018C62C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B84D0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B84D0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B84D0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018C654[])(void); +extern int D_801B84D0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018C654[*(unsigned short *)((char *)param_1 + 2)](); + D_801B84D0 = D_801B84D0 - 1; + if (D_801B84D0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C634; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018C634); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018C644; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018C644); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018C694[])(void); + +void func_80157DC4(void *a0) { + D_8018C694[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018C69C[])(void); + +void func_80157FC4(void *a0) { + D_8018C69C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018C668; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018C668); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018C6A8[])(void); + +void func_8015824C(void *a0) { + D_8018C6A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018C678; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018C678); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B84D8; +extern s32 D_801B84E4; +extern s32 D_801B84E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B84D8 = 0; + D_801B84E4 = 1; + D_801B84E8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B84D8; +extern s32 D_801B84E4; +extern s32 D_801B84E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B84D8 = 0; + D_801B84E4 = 1; + D_801B84E8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018C6E4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018C6E4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B84D8; + +void func_80158BB0(void *arg0) { + if (D_801B84D8 == 0) { + D_801B84D8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B84E4; +extern s32 D_8018C6B8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B84E4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018C6B8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B84E8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B84E8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B84D8; +extern s32 D_801B84E0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B84D8 == 4) { + D_801B84D8 = 5; + } + if (D_801B84E0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018C720[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018C720; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_801594E8); + + +extern void (*D_8018C934[])(void); + +void func_80159698(void *a0) { + D_8018C934[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018C754)); + func_80028620(1, &(*(u8 *)&D_8018C754) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018C754) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018C9D8[])(void); + +void func_80159968(void *a0) { + D_8018C9D8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018CB2C[])(void); + +void func_80159B70(void *a0) { + D_8018CB2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018C948; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018C948); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018CB34[])(void); + +void func_8015A264(void *a0) { + D_8018CB34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018C958; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018C958); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8015A3C8.c b/src/ov_SC03_105/ov_SC03_105_jr_8015A3C8.c new file mode 100644 index 000000000..726182235 --- /dev/null +++ b/src/ov_SC03_105/ov_SC03_105_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018C880; +extern u8 D_8018C7F0; +extern u8 D_8018C7CC; +extern u8 D_8018C7A8; +extern u8 D_8018C85C; +extern u8 D_8018C838; +extern u8 D_8018C814; +extern u8 D_8018C784; +extern void func_80145934(void); +extern u8 D_8018C910; +extern u8 D_8018C8EC; +extern u8 D_8018C8C8; +extern u8 D_8018C8A4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018BD08[]; +extern unsigned char D_8018BD38[]; +extern unsigned char D_8018BD88[]; +extern unsigned char D_8018BDB8[]; +extern unsigned char D_8018BDE8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018BE38[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018BF00[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018BF88[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018BF90; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8498; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B849C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018BFC0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C068[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C08C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C07C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C0A0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C0AC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C0BC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C0D4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C0C4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C0E8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C104[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C0F4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C118[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C12C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C140; +extern void (*D_8018C168[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C148; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018C1B4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018C1B8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018C61C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018C62C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B84D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018C654[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018C634; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018C644; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018C694[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018C69C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018C668; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018C6A8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018C678; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B84D8; +extern s32 D_801B84E4; +extern s32 D_801B84E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018C6E4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018C6B8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B84E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018C934[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018C754[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018C9D8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018CB2C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018C948; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018CB34[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018C958; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C9E4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018C968; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018C968); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C9E4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018C978 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018C978; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018C978); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018CB3C[])(void); + +void func_8015AD3C(void *a0) { + D_8018CB3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_108/ov_SC03_108_after.c b/src/ov_SC03_108/ov_SC03_108_after.c index 6359bc1c0..0e91592ff 100644 --- a/src/ov_SC03_108/ov_SC03_108_after.c +++ b/src/ov_SC03_108/ov_SC03_108_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_108/nonmatchings/ov_SC03_108_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80182ACC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80182ACC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182B0C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182B0C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80182B10[])(void); - -void func_80155580(void *a0) { - D_80182B10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182D04[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182D04[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182F74 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182F74[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182F74[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182F84[])(void); - -void func_80157544(void *a0) { - D_80182F84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A07C0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A07C0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A07C0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182FAC[])(void); -extern int D_801A07C0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182FAC[*(unsigned short *)((char *)param_1 + 2)](); - D_801A07C0 = D_801A07C0 - 1; - if (D_801A07C0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80182F8C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182F8C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80182F9C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182F9C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182FEC[])(void); - -void func_80157DC4(void *a0) { - D_80182FEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182FF4[])(void); - -void func_80157FC4(void *a0) { - D_80182FF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182FC0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182FC0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80183000[])(void); - -void func_8015824C(void *a0) { - D_80183000[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182FD0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182FD0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A07C8; -extern s32 D_801A07D4; -extern s32 D_801A07D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A07C8 = 0; - D_801A07D4 = 1; - D_801A07D8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A07C8; -extern s32 D_801A07D4; -extern s32 D_801A07D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A07C8 = 0; - D_801A07D4 = 1; - D_801A07D8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018303C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018303C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A07C8; - -void func_80158BB0(void *arg0) { - if (D_801A07C8 == 0) { - D_801A07C8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A07D4; -extern s32 D_80183010[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A07D4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80183010[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A07D8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A07D8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A07C8; -extern s32 D_801A07D0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A07C8 == 4) { - D_801A07C8 = 5; - } - if (D_801A07D0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80183078[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80183078; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_801594E8); - - -extern void (*D_8018328C[])(void); - -void func_80159698(void *a0) { - D_8018328C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801830AC)); - func_80028620(1, &(*(u8 *)&D_801830AC) + 0x10); - func_80028620(2, &(*(u8 *)&D_801830AC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80183330[])(void); - -void func_80159968(void *a0) { - D_80183330[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183484[])(void); - -void func_80159B70(void *a0) { - D_80183484[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801832A0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801832A0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018348C[])(void); - -void func_8015A264(void *a0) { - D_8018348C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801832B0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801832B0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018333C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801832C0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018333C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801832C0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018333C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801832D0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801832D0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801832D0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183494[])(void); - -void func_8015AD3C(void *a0) { - D_80183494[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8015444C.c b/src/ov_SC03_108/ov_SC03_108_jr_8015444C.c new file mode 100644 index 000000000..8516f00e4 --- /dev/null +++ b/src/ov_SC03_108/ov_SC03_108_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801831D8; +extern u8 D_80183148; +extern u8 D_80183124; +extern u8 D_80183100; +extern u8 D_801831B4; +extern u8 D_80183190; +extern u8 D_8018316C; +extern u8 D_801830DC; +extern void func_80145934(void); +extern u8 D_80183268; +extern u8 D_80183244; +extern u8 D_80183220; +extern u8 D_801831FC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182660[]; +extern unsigned char D_80182690[]; +extern unsigned char D_801826E0[]; +extern unsigned char D_80182710[]; +extern unsigned char D_80182740[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182790[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182858[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801828E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801828E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0788; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A078C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182918; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801829C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801829E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801829D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801829F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182A04[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182A14[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182A2C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182A1C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182A40[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182A5C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182A4C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182A70[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182A84[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182A98; +extern void (*D_80182AC0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182AA0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80182ACC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80182ACC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182B0C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182B0C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80182B10[])(void); + +void func_80155580(void *a0) { + D_80182B10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182D04[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182D04[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182F74 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182F74[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182F74[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182F84[])(void); + +void func_80157544(void *a0) { + D_80182F84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A07C0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A07C0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A07C0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182FAC[])(void); +extern int D_801A07C0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182FAC[*(unsigned short *)((char *)param_1 + 2)](); + D_801A07C0 = D_801A07C0 - 1; + if (D_801A07C0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182F8C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182F8C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80182F9C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182F9C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182FEC[])(void); + +void func_80157DC4(void *a0) { + D_80182FEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182FF4[])(void); + +void func_80157FC4(void *a0) { + D_80182FF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182FC0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182FC0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80183000[])(void); + +void func_8015824C(void *a0) { + D_80183000[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182FD0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182FD0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A07C8; +extern s32 D_801A07D4; +extern s32 D_801A07D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A07C8 = 0; + D_801A07D4 = 1; + D_801A07D8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A07C8; +extern s32 D_801A07D4; +extern s32 D_801A07D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A07C8 = 0; + D_801A07D4 = 1; + D_801A07D8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018303C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018303C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A07C8; + +void func_80158BB0(void *arg0) { + if (D_801A07C8 == 0) { + D_801A07C8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A07D4; +extern s32 D_80183010[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A07D4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80183010[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A07D8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A07D8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A07C8; +extern s32 D_801A07D0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A07C8 == 4) { + D_801A07C8 = 5; + } + if (D_801A07D0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80183078[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80183078; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_801594E8); + + +extern void (*D_8018328C[])(void); + +void func_80159698(void *a0) { + D_8018328C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801830AC)); + func_80028620(1, &(*(u8 *)&D_801830AC) + 0x10); + func_80028620(2, &(*(u8 *)&D_801830AC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80183330[])(void); + +void func_80159968(void *a0) { + D_80183330[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183484[])(void); + +void func_80159B70(void *a0) { + D_80183484[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801832A0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801832A0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018348C[])(void); + +void func_8015A264(void *a0) { + D_8018348C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801832B0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801832B0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_108/ov_SC03_108_jr_8015A3C8.c b/src/ov_SC03_108/ov_SC03_108_jr_8015A3C8.c new file mode 100644 index 000000000..33d995c5e --- /dev/null +++ b/src/ov_SC03_108/ov_SC03_108_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801831D8; +extern u8 D_80183148; +extern u8 D_80183124; +extern u8 D_80183100; +extern u8 D_801831B4; +extern u8 D_80183190; +extern u8 D_8018316C; +extern u8 D_801830DC; +extern void func_80145934(void); +extern u8 D_80183268; +extern u8 D_80183244; +extern u8 D_80183220; +extern u8 D_801831FC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182660[]; +extern unsigned char D_80182690[]; +extern unsigned char D_801826E0[]; +extern unsigned char D_80182710[]; +extern unsigned char D_80182740[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80182790[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182858[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801828E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801828E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0788; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A078C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182918; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801829C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801829E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801829D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801829F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182A04[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182A14[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182A2C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182A1C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80182A40[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182A5C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182A4C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182A70[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182A84[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182A98; +extern void (*D_80182AC0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182AA0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182B0C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182B10[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182F74[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182F84[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A07C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182FAC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182F8C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182F9C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182FEC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182FF4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182FC0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80183000[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182FD0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A07C8; +extern s32 D_801A07D4; +extern s32 D_801A07D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018303C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80183010[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A07D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018328C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801830AC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183330[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183484[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801832A0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018348C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801832B0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018333C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801832C0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018333C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801832C0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018333C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801832D0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801832D0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801832D0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183494[])(void); + +void func_8015AD3C(void *a0) { + D_80183494[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_109/ov_SC03_109_after.c b/src/ov_SC03_109/ov_SC03_109_after.c index 40781108b..c13189efe 100644 --- a/src/ov_SC03_109/ov_SC03_109_after.c +++ b/src/ov_SC03_109/ov_SC03_109_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_109/nonmatchings/ov_SC03_109_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80180178[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80180178[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801801B8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801801B8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801801BC[])(void); - -void func_80155580(void *a0) { - D_801801BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801803B0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801803B0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180620 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180620[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180620[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180630[])(void); - -void func_80157544(void *a0) { - D_80180630[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801991D0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801991D0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801991D0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180658[])(void); -extern int D_801991D0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180658[*(unsigned short *)((char *)param_1 + 2)](); - D_801991D0 = D_801991D0 - 1; - if (D_801991D0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180638; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180638); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180648; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180648); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180698[])(void); - -void func_80157DC4(void *a0) { - D_80180698[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801806A0[])(void); - -void func_80157FC4(void *a0) { - D_801806A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018066C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018066C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801806AC[])(void); - -void func_8015824C(void *a0) { - D_801806AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018067C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018067C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801991D8; -extern s32 D_801991E4; -extern s32 D_801991E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801991D8 = 0; - D_801991E4 = 1; - D_801991E8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801991D8; -extern s32 D_801991E4; -extern s32 D_801991E8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801991D8 = 0; - D_801991E4 = 1; - D_801991E8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801806E8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801806E8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801991D8; - -void func_80158BB0(void *arg0) { - if (D_801991D8 == 0) { - D_801991D8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801991E4; -extern s32 D_801806BC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801991E4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801806BC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801991E8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801991E8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801991D8; -extern s32 D_801991E0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801991D8 == 4) { - D_801991D8 = 5; - } - if (D_801991E0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180724[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180724; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_801594E8); - - -extern void (*D_80180938[])(void); - -void func_80159698(void *a0) { - D_80180938[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180758)); - func_80028620(1, &(*(u8 *)&D_80180758) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180758) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801809DC[])(void); - -void func_80159968(void *a0) { - D_801809DC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180B30[])(void); - -void func_80159B70(void *a0) { - D_80180B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018094C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018094C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180B38[])(void); - -void func_8015A264(void *a0) { - D_80180B38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018095C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018095C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801809E8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018096C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801809E8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018096C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801809E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018097C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018097C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018097C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180B40[])(void); - -void func_8015AD3C(void *a0) { - D_80180B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8015444C.c b/src/ov_SC03_109/ov_SC03_109_jr_8015444C.c new file mode 100644 index 000000000..7571f84d5 --- /dev/null +++ b/src/ov_SC03_109/ov_SC03_109_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180884; +extern u8 D_801807F4; +extern u8 D_801807D0; +extern u8 D_801807AC; +extern u8 D_80180860; +extern u8 D_8018083C; +extern u8 D_80180818; +extern u8 D_80180788; +extern void func_80145934(void); +extern u8 D_80180914; +extern u8 D_801808F0; +extern u8 D_801808CC; +extern u8 D_801808A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FD0C[]; +extern unsigned char D_8017FD3C[]; +extern unsigned char D_8017FD8C[]; +extern unsigned char D_8017FDBC[]; +extern unsigned char D_8017FDEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FE3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FF04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FF8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FF94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199198; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019919C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FFC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018006C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801800A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801800B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801800C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801800D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801800C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801800EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801800F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018011C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180144; +extern void (*D_8018016C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018014C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80180178[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80180178[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801801B8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801801B8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801801BC[])(void); + +void func_80155580(void *a0) { + D_801801BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801803B0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801803B0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180620 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180620[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180620[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180630[])(void); + +void func_80157544(void *a0) { + D_80180630[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801991D0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801991D0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801991D0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180658[])(void); +extern int D_801991D0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180658[*(unsigned short *)((char *)param_1 + 2)](); + D_801991D0 = D_801991D0 - 1; + if (D_801991D0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180638; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180638); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180648; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180648); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180698[])(void); + +void func_80157DC4(void *a0) { + D_80180698[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801806A0[])(void); + +void func_80157FC4(void *a0) { + D_801806A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018066C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018066C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801806AC[])(void); + +void func_8015824C(void *a0) { + D_801806AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018067C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018067C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801991D8; +extern s32 D_801991E4; +extern s32 D_801991E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801991D8 = 0; + D_801991E4 = 1; + D_801991E8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801991D8; +extern s32 D_801991E4; +extern s32 D_801991E8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801991D8 = 0; + D_801991E4 = 1; + D_801991E8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801806E8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801806E8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801991D8; + +void func_80158BB0(void *arg0) { + if (D_801991D8 == 0) { + D_801991D8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801991E4; +extern s32 D_801806BC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801991E4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801806BC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801991E8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801991E8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801991D8; +extern s32 D_801991E0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801991D8 == 4) { + D_801991D8 = 5; + } + if (D_801991E0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180724[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180724; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_801594E8); + + +extern void (*D_80180938[])(void); + +void func_80159698(void *a0) { + D_80180938[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180758)); + func_80028620(1, &(*(u8 *)&D_80180758) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180758) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801809DC[])(void); + +void func_80159968(void *a0) { + D_801809DC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180B30[])(void); + +void func_80159B70(void *a0) { + D_80180B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018094C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018094C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_109/nonmatchings/ov_SC03_109_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180B38[])(void); + +void func_8015A264(void *a0) { + D_80180B38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018095C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018095C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_109/ov_SC03_109_jr_8015A3C8.c b/src/ov_SC03_109/ov_SC03_109_jr_8015A3C8.c new file mode 100644 index 000000000..4f820e3c3 --- /dev/null +++ b/src/ov_SC03_109/ov_SC03_109_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180884; +extern u8 D_801807F4; +extern u8 D_801807D0; +extern u8 D_801807AC; +extern u8 D_80180860; +extern u8 D_8018083C; +extern u8 D_80180818; +extern u8 D_80180788; +extern void func_80145934(void); +extern u8 D_80180914; +extern u8 D_801808F0; +extern u8 D_801808CC; +extern u8 D_801808A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FD0C[]; +extern unsigned char D_8017FD3C[]; +extern unsigned char D_8017FD8C[]; +extern unsigned char D_8017FDBC[]; +extern unsigned char D_8017FDEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FE3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FF04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FF8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FF94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199198; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019919C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FFC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018006C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801800A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801800B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801800C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801800D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801800C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801800EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801800F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018011C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180144; +extern void (*D_8018016C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018014C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801801B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801801BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180620[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180630[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801991D0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180658[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180638; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180648; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180698[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801806A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018066C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801806AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018067C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801991D8; +extern s32 D_801991E4; +extern s32 D_801991E8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801806E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801806BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801991E0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180938[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180758[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801809DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180B30[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018094C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180B38[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018095C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801809E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018096C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801809E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018096C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801809E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018097C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018097C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018097C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180B40[])(void); + +void func_8015AD3C(void *a0) { + D_80180B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_110/ov_SC03_110_after.c b/src/ov_SC03_110/ov_SC03_110_after.c index b71ae0a37..50f5e2a72 100644 --- a/src/ov_SC03_110/ov_SC03_110_after.c +++ b/src/ov_SC03_110/ov_SC03_110_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_110/nonmatchings/ov_SC03_110_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183B98[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183B98[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183BD8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183BD8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183BDC[])(void); - -void func_80155580(void *a0) { - D_80183BDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80183DD0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80183DD0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184040 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184040[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184040[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184050[])(void); - -void func_80157544(void *a0) { - D_80184050[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A0F78; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A0F78 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A0F78 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184078[])(void); -extern int D_801A0F78; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184078[*(unsigned short *)((char *)param_1 + 2)](); - D_801A0F78 = D_801A0F78 - 1; - if (D_801A0F78 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184058; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184058); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184068; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184068); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801840B8[])(void); - -void func_80157DC4(void *a0) { - D_801840B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801840C0[])(void); - -void func_80157FC4(void *a0) { - D_801840C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018408C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018408C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801840CC[])(void); - -void func_8015824C(void *a0) { - D_801840CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018409C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018409C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A0F80; -extern s32 D_801A0F8C; -extern s32 D_801A0F90; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A0F80 = 0; - D_801A0F8C = 1; - D_801A0F90 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A0F80; -extern s32 D_801A0F8C; -extern s32 D_801A0F90; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A0F80 = 0; - D_801A0F8C = 1; - D_801A0F90 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184108[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184108[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A0F80; - -void func_80158BB0(void *arg0) { - if (D_801A0F80 == 0) { - D_801A0F80 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A0F8C; -extern s32 D_801840DC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A0F8C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801840DC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A0F90; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A0F90 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A0F80; -extern s32 D_801A0F88; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A0F80 == 4) { - D_801A0F80 = 5; - } - if (D_801A0F88 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184144[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184144; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_801594E8); - - -extern void (*D_80184358[])(void); - -void func_80159698(void *a0) { - D_80184358[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184178)); - func_80028620(1, &(*(u8 *)&D_80184178) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184178) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801843FC[])(void); - -void func_80159968(void *a0) { - D_801843FC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184550[])(void); - -void func_80159B70(void *a0) { - D_80184550[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018436C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018436C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184558[])(void); - -void func_8015A264(void *a0) { - D_80184558[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018437C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018437C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184408[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern ImgRect8 D_8018438C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184408[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018438C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184408[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018439C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018439C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018439C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184560[])(void); - -void func_8015AD3C(void *a0) { - D_80184560[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8015444C.c b/src/ov_SC03_110/ov_SC03_110_jr_8015444C.c new file mode 100644 index 000000000..dca703921 --- /dev/null +++ b/src/ov_SC03_110/ov_SC03_110_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842A4; +extern u8 D_80184214; +extern u8 D_801841F0; +extern u8 D_801841CC; +extern u8 D_80184280; +extern u8 D_8018425C; +extern u8 D_80184238; +extern u8 D_801841A8; +extern void func_80145934(void); +extern u8 D_80184334; +extern u8 D_80184310; +extern u8 D_801842EC; +extern u8 D_801842C8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018372C[]; +extern unsigned char D_8018375C[]; +extern unsigned char D_801837AC[]; +extern unsigned char D_801837DC[]; +extern unsigned char D_8018380C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018385C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183924[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0F40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A0F44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801839E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183A8C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AB0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AA0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183AC4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183AD0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183AE0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183AF8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183AE8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B0C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B28[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B18; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B3C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B50[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183B64; +extern void (*D_80183B8C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183B6C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183B98[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183B98[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183BD8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183BD8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183BDC[])(void); + +void func_80155580(void *a0) { + D_80183BDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80183DD0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80183DD0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184040 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184040[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184040[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184050[])(void); + +void func_80157544(void *a0) { + D_80184050[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A0F78; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A0F78 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A0F78 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184078[])(void); +extern int D_801A0F78; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184078[*(unsigned short *)((char *)param_1 + 2)](); + D_801A0F78 = D_801A0F78 - 1; + if (D_801A0F78 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184058; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184058); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184068; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184068); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801840B8[])(void); + +void func_80157DC4(void *a0) { + D_801840B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801840C0[])(void); + +void func_80157FC4(void *a0) { + D_801840C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018408C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018408C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801840CC[])(void); + +void func_8015824C(void *a0) { + D_801840CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018409C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018409C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A0F80; +extern s32 D_801A0F8C; +extern s32 D_801A0F90; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A0F80 = 0; + D_801A0F8C = 1; + D_801A0F90 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A0F80; +extern s32 D_801A0F8C; +extern s32 D_801A0F90; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A0F80 = 0; + D_801A0F8C = 1; + D_801A0F90 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184108[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184108[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A0F80; + +void func_80158BB0(void *arg0) { + if (D_801A0F80 == 0) { + D_801A0F80 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A0F8C; +extern s32 D_801840DC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A0F8C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801840DC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A0F90; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A0F90 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0F80; +extern s32 D_801A0F88; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A0F80 == 4) { + D_801A0F80 = 5; + } + if (D_801A0F88 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184144[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184144; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_801594E8); + + +extern void (*D_80184358[])(void); + +void func_80159698(void *a0) { + D_80184358[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184178)); + func_80028620(1, &(*(u8 *)&D_80184178) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184178) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801843FC[])(void); + +void func_80159968(void *a0) { + D_801843FC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184550[])(void); + +void func_80159B70(void *a0) { + D_80184550[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018436C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018436C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184558[])(void); + +void func_8015A264(void *a0) { + D_80184558[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018437C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018437C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_110/ov_SC03_110_jr_8015A3C8.c b/src/ov_SC03_110/ov_SC03_110_jr_8015A3C8.c new file mode 100644 index 000000000..49a25fe90 --- /dev/null +++ b/src/ov_SC03_110/ov_SC03_110_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842A4; +extern u8 D_80184214; +extern u8 D_801841F0; +extern u8 D_801841CC; +extern u8 D_80184280; +extern u8 D_8018425C; +extern u8 D_80184238; +extern u8 D_801841A8; +extern void func_80145934(void); +extern u8 D_80184334; +extern u8 D_80184310; +extern u8 D_801842EC; +extern u8 D_801842C8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018372C[]; +extern unsigned char D_8018375C[]; +extern unsigned char D_801837AC[]; +extern unsigned char D_801837DC[]; +extern unsigned char D_8018380C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018385C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183924[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A0F40; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A0F44; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801839E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183A8C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AB0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AA0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183AC4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183AD0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183AE0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183AF8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183AE8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B0C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B28[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B18; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B3C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B50[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183B64; +extern void (*D_80183B8C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183B6C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183BD8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183BDC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184040[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184050[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A0F78; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184078[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184058; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184068; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801840B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801840C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018408C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801840CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018409C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A0F80; +extern s32 D_801A0F8C; +extern s32 D_801A0F90; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184108[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801840DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0F88; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184358[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184178[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801843FC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184550[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018436C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184558[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018437C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184408[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern ImgRect8 D_8018438C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184408[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018438C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184408[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018439C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018439C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018439C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184560[])(void); + +void func_8015AD3C(void *a0) { + D_80184560[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_111/ov_SC03_111_after.c b/src/ov_SC03_111/ov_SC03_111_after.c index 03e60241a..bffbce714 100644 --- a/src/ov_SC03_111/ov_SC03_111_after.c +++ b/src/ov_SC03_111/ov_SC03_111_after.c @@ -2616,1415 +2616,3 @@ 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_SC03_111/nonmatchings/ov_SC03_111_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018674C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018674C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018678C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018678C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186790[])(void); - -void func_80155580(void *a0) { - D_80186790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_801555F4); - -#include "common.h" - -typedef struct { - u8 pad00[0x12]; - u16 unk12; /* 0x12 */ -} Sub_80155800_80155800; - -typedef struct { - u8 pad00[0x20]; - Sub_80155800_80155800 *unk20; /* 0x20 */ - u8 pad24[0x44 - 0x24]; - s32 unk44; /* 0x44 */ - u8 pad48[0xB8 - 0x48]; - u16 unkB8; /* 0xB8 */ - u8 padBA[0x1A8 - 0xBA]; - u8 unk1A8; /* 0x1A8 */ - u8 unk1A9; /* 0x1A9 */ - u8 unk1AA; /* 0x1AA */ - u8 pad1AB[0x1C0 - 0x1AB]; - u8 unk1C0; /* 0x1C0 */ - u8 pad1C1[0x234 - 0x1C1]; - u8 unk234; /* 0x234 */ -} Ent_80155800_80155800; - - -s32 func_80155800(s32 arg0) { - extern void func_80155A44(void *); - extern void func_80155F80(void *); - extern void func_80155FF8(void *, u8); - extern void func_8015A230(void *); - extern s32 func_80161208(void *); - - struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; - u8 temp_v0; - u8 temp_v1; - s32 var_v1; - - ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; - if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); - return; - } - func_80155A44(((Ent_80155800_80155800 *)arg0)); - if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { - temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; - if (temp_v1 >= 4U) { - if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; - var_v1 = temp_v0 + 1; - if (temp_v0 == 0) { - var_v1 = 2; - } else if (var_v1 >= 5U) { - var_v1 = 1; - } - ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; - ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { - if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { - if (temp_v1 != 0) { - goto block_13; - } - goto block_15; - } - goto block_22; - } -block_13: - ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); - func_80155F80(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); - D_8011F730 |= 3; - return; - } - } -block_15: - if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { - if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); - return; - } - if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { - ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); - func_8015A230(((Ent_80155800_80155800 *)arg0)); - return; - } - goto block_22; - } -block_22: - if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { - ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); - ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); - ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); - ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); - } - if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { - func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); - } -} - - - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186984[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186984[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186BF4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186BF4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186BF4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186C04[])(void); - -void func_80157544(void *a0) { - D_80186C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B8480; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B8480 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B8480 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186C2C[])(void); -extern int D_801B8480; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186C2C[*(unsigned short *)((char *)param_1 + 2)](); - D_801B8480 = D_801B8480 - 1; - if (D_801B8480 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186C0C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186C0C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186C1C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186C1C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186C6C[])(void); - -void func_80157DC4(void *a0) { - D_80186C6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186C74[])(void); - -void func_80157FC4(void *a0) { - D_80186C74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186C40; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186C40); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186C80[])(void); - -void func_8015824C(void *a0) { - D_80186C80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186C50; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186C50); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B8488; -extern s32 D_801B8494; -extern s32 D_801B8498; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B8488 = 0; - D_801B8494 = 1; - D_801B8498 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B8488; -extern s32 D_801B8494; -extern s32 D_801B8498; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B8488 = 0; - D_801B8494 = 1; - D_801B8498 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80186CBC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80186CBC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B8488; - -void func_80158BB0(void *arg0) { - if (D_801B8488 == 0) { - D_801B8488 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B8494; -extern s32 D_80186C90[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B8494; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C90[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B8498; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B8498 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B8488; -extern s32 D_801B8490; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B8488 == 4) { - D_801B8488 = 5; - } - if (D_801B8490 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186CF8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186CF8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_801594E8); - - -extern void (*D_80186F0C[])(void); - -void func_80159698(void *a0) { - D_80186F0C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186D2C)); - func_80028620(1, &(*(u8 *)&D_80186D2C) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186D2C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186FB0[])(void); - -void func_80159968(void *a0) { - D_80186FB0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187104[])(void); - -void func_80159B70(void *a0) { - D_80187104[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186F20; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186F20); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018710C[])(void); - -void func_8015A264(void *a0) { - D_8018710C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186F30; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186F30); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186FBC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80186F40; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186FBC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80186F40); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186FBC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186F50 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186F50; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186F50); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187114[])(void); - -void func_8015AD3C(void *a0) { - D_80187114[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8015444C.c b/src/ov_SC03_111/ov_SC03_111_jr_8015444C.c new file mode 100644 index 000000000..000c79f88 --- /dev/null +++ b/src/ov_SC03_111/ov_SC03_111_jr_8015444C.c @@ -0,0 +1,2292 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E58; +extern u8 D_80186DC8; +extern u8 D_80186DA4; +extern u8 D_80186D80; +extern u8 D_80186E34; +extern u8 D_80186E10; +extern u8 D_80186DEC; +extern u8 D_80186D5C; +extern void func_80145934(void); +extern u8 D_80186EE8; +extern u8 D_80186EC4; +extern u8 D_80186EA0; +extern u8 D_80186E7C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862E0[]; +extern unsigned char D_80186310[]; +extern unsigned char D_80186360[]; +extern unsigned char D_80186390[]; +extern unsigned char D_801863C0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186410[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864D8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186560[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186568; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8448; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B844C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186598; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186640[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186664[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186654; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186684[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186694[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801866AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018669C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801866C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801866CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186704[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186718; +extern void (*D_80186740[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186720; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018674C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018674C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018678C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018678C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186790[])(void); + +void func_80155580(void *a0) { + D_80186790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_801555F4); + +#include "common.h" + +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; + +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; + + +s32 func_80155800(s32 arg0) { + extern void func_80155A44(void *); + extern void func_80155F80(void *); + extern void func_80155FF8(void *, u8); + extern void func_8015A230(void *); + extern s32 func_80161208(void *); + + struct { s16 a, b, c, d, e, f, g, h, i, j, k, l; } sp10; + u8 temp_v0; + u8 temp_v1; + s32 var_v1; + + ((Ent_80155800_80155800 *)arg0)->unk44 |= 2; + if (((Ent_80155800_80155800 *)arg0)->unkB8 == 0x8000) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80159B3C)(((Ent_80155800_80155800 *)arg0)); + return; + } + func_80155A44(((Ent_80155800_80155800 *)arg0)); + if (((s32(*)(void *))func_80148800)(((Ent_80155800_80155800 *)arg0)) & 0x80) { + temp_v1 = ((Ent_80155800_80155800 *)arg0)->unk1A9; + if (temp_v1 >= 4U) { + if (((Ent_80155800_80155800 *)arg0)->unk1C0 != 0) { + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + temp_v0 = ((Ent_80155800_80155800 *)arg0)->unk1AA; + var_v1 = temp_v0 + 1; + if (temp_v0 == 0) { + var_v1 = 2; + } else if (var_v1 >= 5U) { + var_v1 = 1; + } + ((Ent_80155800_80155800 *)arg0)->unk1AA = var_v1; + ((void(*)(void *))func_80149B14)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (((Ent_80155800_80155800 *)arg0)->unk1AA >= 2U) { + if (((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) { + if (temp_v1 != 0) { + goto block_13; + } + goto block_15; + } + goto block_22; + } +block_13: + ((void(*)(void *))func_80148AFC)(((Ent_80155800_80155800 *)arg0)); + func_80155F80(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80154134)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149AD4)(((Ent_80155800_80155800 *)arg0)); + D_8011F730 |= 3; + return; + } + } +block_15: + if ((((Ent_80155800_80155800 *)arg0)->unk1A8 == 0) && (((Ent_80155800_80155800 *)arg0)->unk1A9 != 0)) { + if (((s32(*)(void *))func_801496D4)(((Ent_80155800_80155800 *)arg0)) != 0) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_80149704)(((Ent_80155800_80155800 *)arg0)); + return; + } + if (!(((s32(*)(void *))func_801487F4)(((Ent_80155800_80155800 *)arg0)) & 8) && (((s32(*)(void *))func_801488A8)(((Ent_80155800_80155800 *)arg0)) != 0)) { + ((void(*)(void *))func_801599A4)(((Ent_80155800_80155800 *)arg0)); + func_8015A230(((Ent_80155800_80155800 *)arg0)); + return; + } + goto block_22; + } +block_22: + if (((s32(*)(void *))func_80146E98)(((Ent_80155800_80155800 *)arg0)) == 0) { + ((void(*)(s16, void *, void *))func_8001382C)((s16) -(s32) ((Ent_80155800_80155800 *)arg0)->unk20->unk12, &((Ent_80155800_80155800 *)arg0)->unk234, &sp10); + ((void(*)(void *, void *))func_80146DB8)(((Ent_80155800_80155800 *)arg0), &sp10); + ((void(*)(void *))func_80147A84)(((Ent_80155800_80155800 *)arg0)); + ((void(*)(void *))func_801473EC)(((Ent_80155800_80155800 *)arg0)); + } + if (func_80161208(((Ent_80155800_80155800 *)arg0)) == 0) { + func_80155FF8(((Ent_80155800_80155800 *)arg0), ((Ent_80155800_80155800 *)arg0)->unk1AA); + } +} + + + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186984[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186984[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186BF4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BF4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186BF4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186C04[])(void); + +void func_80157544(void *a0) { + D_80186C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B8480; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B8480 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B8480 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186C2C[])(void); +extern int D_801B8480; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186C2C[*(unsigned short *)((char *)param_1 + 2)](); + D_801B8480 = D_801B8480 - 1; + if (D_801B8480 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186C0C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186C0C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186C1C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186C1C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186C6C[])(void); + +void func_80157DC4(void *a0) { + D_80186C6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186C74[])(void); + +void func_80157FC4(void *a0) { + D_80186C74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186C40; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186C40); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186C80[])(void); + +void func_8015824C(void *a0) { + D_80186C80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186C50; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186C50); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B8488; +extern s32 D_801B8494; +extern s32 D_801B8498; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B8488 = 0; + D_801B8494 = 1; + D_801B8498 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B8488; +extern s32 D_801B8494; +extern s32 D_801B8498; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B8488 = 0; + D_801B8494 = 1; + D_801B8498 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80186CBC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80186CBC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B8488; + +void func_80158BB0(void *arg0) { + if (D_801B8488 == 0) { + D_801B8488 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B8494; +extern s32 D_80186C90[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B8494; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C90[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B8498; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B8498 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8488; +extern s32 D_801B8490; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B8488 == 4) { + D_801B8488 = 5; + } + if (D_801B8490 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186CF8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186CF8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_801594E8); + + +extern void (*D_80186F0C[])(void); + +void func_80159698(void *a0) { + D_80186F0C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186D2C)); + func_80028620(1, &(*(u8 *)&D_80186D2C) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186D2C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186FB0[])(void); + +void func_80159968(void *a0) { + D_80186FB0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187104[])(void); + +void func_80159B70(void *a0) { + D_80187104[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186F20; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186F20); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018710C[])(void); + +void func_8015A264(void *a0) { + D_8018710C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186F30; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186F30); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_111/ov_SC03_111_jr_8015A3C8.c b/src/ov_SC03_111/ov_SC03_111_jr_8015A3C8.c new file mode 100644 index 000000000..a20118d20 --- /dev/null +++ b/src/ov_SC03_111/ov_SC03_111_jr_8015A3C8.c @@ -0,0 +1,1499 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +typedef struct { + u8 pad00[0x12]; + u16 unk12; /* 0x12 */ +} Sub_80155800_80155800; +typedef struct { + u8 pad00[0x20]; + Sub_80155800_80155800 *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + s32 unk44; /* 0x44 */ + u8 pad48[0xB8 - 0x48]; + u16 unkB8; /* 0xB8 */ + u8 padBA[0x1A8 - 0xBA]; + u8 unk1A8; /* 0x1A8 */ + u8 unk1A9; /* 0x1A9 */ + u8 unk1AA; /* 0x1AA */ + u8 pad1AB[0x1C0 - 0x1AB]; + u8 unk1C0; /* 0x1C0 */ + u8 pad1C1[0x234 - 0x1C1]; + u8 unk234; /* 0x234 */ +} Ent_80155800_80155800; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186E58; +extern u8 D_80186DC8; +extern u8 D_80186DA4; +extern u8 D_80186D80; +extern u8 D_80186E34; +extern u8 D_80186E10; +extern u8 D_80186DEC; +extern u8 D_80186D5C; +extern void func_80145934(void); +extern u8 D_80186EE8; +extern u8 D_80186EC4; +extern u8 D_80186EA0; +extern u8 D_80186E7C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801862E0[]; +extern unsigned char D_80186310[]; +extern unsigned char D_80186360[]; +extern unsigned char D_80186390[]; +extern unsigned char D_801863C0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186410[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801864D8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186560[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186568; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8448; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B844C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186598; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186640[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186664[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186654; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186684[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186694[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801866AC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018669C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801866C0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801866DC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801866CC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801866F0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186704[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186718; +extern void (*D_80186740[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186720; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018678C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186790[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern s32 func_80155800(s32 arg0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186BF4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186C04[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B8480; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186C2C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186C0C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186C1C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C6C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C74[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186C40; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C80[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186C50; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B8488; +extern s32 D_801B8494; +extern s32 D_801B8498; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186CBC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C90[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8490; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186F0C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186D2C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186FB0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187104[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186F20; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018710C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186F30; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186FBC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80186F40; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186FBC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80186F40); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186FBC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186F50 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186F50; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186F50); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187114[])(void); + +void func_8015AD3C(void *a0) { + D_80187114[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_112/ov_SC03_112_after.c b/src/ov_SC03_112/ov_SC03_112_after.c index bbee65654..022d74438 100644 --- a/src/ov_SC03_112/ov_SC03_112_after.c +++ b/src/ov_SC03_112/ov_SC03_112_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_112/nonmatchings/ov_SC03_112_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187554[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187554[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187594[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187594[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187598[])(void); - -void func_80155580(void *a0) { - D_80187598[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018778C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018778C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801879FC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801879FC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801879FC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187A0C[])(void); - -void func_80157544(void *a0) { - D_80187A0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801ABCE0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801ABCE0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801ABCE0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187A34[])(void); -extern int D_801ABCE0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187A34[*(unsigned short *)((char *)param_1 + 2)](); - D_801ABCE0 = D_801ABCE0 - 1; - if (D_801ABCE0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187A14; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187A14); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187A24; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187A24); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187A74[])(void); - -void func_80157DC4(void *a0) { - D_80187A74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187A7C[])(void); - -void func_80157FC4(void *a0) { - D_80187A7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187A48; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187A48); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187A88[])(void); - -void func_8015824C(void *a0) { - D_80187A88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187A58; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187A58); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801ABCE8; -extern s32 D_801ABCF4; -extern s32 D_801ABCF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801ABCE8 = 0; - D_801ABCF4 = 1; - D_801ABCF8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801ABCE8; -extern s32 D_801ABCF4; -extern s32 D_801ABCF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801ABCE8 = 0; - D_801ABCF4 = 1; - D_801ABCF8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187AC4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187AC4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801ABCE8; - -void func_80158BB0(void *arg0) { - if (D_801ABCE8 == 0) { - D_801ABCE8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801ABCF4; -extern s32 D_80187A98[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801ABCF4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187A98[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801ABCF8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801ABCF8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801ABCE8; -extern s32 D_801ABCF0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801ABCE8 == 4) { - D_801ABCE8 = 5; - } - if (D_801ABCF0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187B00[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187B00; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_801594E8); - - -extern void (*D_80187D14[])(void); - -void func_80159698(void *a0) { - D_80187D14[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187B34)); - func_80028620(1, &(*(u8 *)&D_80187B34) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187B34) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187DB8[])(void); - -void func_80159968(void *a0) { - D_80187DB8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187F0C[])(void); - -void func_80159B70(void *a0) { - D_80187F0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187D28; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187D28); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187F14[])(void); - -void func_8015A264(void *a0) { - D_80187F14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187D38; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187D38); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187DC4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80187D48; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187DC4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187D48); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187DC4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187D58 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80187D58; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80187D58); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187F1C[])(void); - -void func_8015AD3C(void *a0) { - D_80187F1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8015444C.c b/src/ov_SC03_112/ov_SC03_112_jr_8015444C.c new file mode 100644 index 000000000..19c2f201b --- /dev/null +++ b/src/ov_SC03_112/ov_SC03_112_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187C60; +extern u8 D_80187BD0; +extern u8 D_80187BAC; +extern u8 D_80187B88; +extern u8 D_80187C3C; +extern u8 D_80187C18; +extern u8 D_80187BF4; +extern u8 D_80187B64; +extern void func_80145934(void); +extern u8 D_80187CF0; +extern u8 D_80187CCC; +extern u8 D_80187CA8; +extern u8 D_80187C84; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801870E8[]; +extern unsigned char D_80187118[]; +extern unsigned char D_80187168[]; +extern unsigned char D_80187198[]; +extern unsigned char D_801871C8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187218[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801872E0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187368[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187370; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ABCA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ABCAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801873A0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187448[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018746C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018745C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018748C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018749C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801874B4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801874A4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801874C8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801874E4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801874D4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801874F8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018750C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187520; +extern void (*D_80187548[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187528; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187554[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187554[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187594[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187594[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187598[])(void); + +void func_80155580(void *a0) { + D_80187598[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018778C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018778C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801879FC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801879FC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801879FC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187A0C[])(void); + +void func_80157544(void *a0) { + D_80187A0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801ABCE0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801ABCE0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801ABCE0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187A34[])(void); +extern int D_801ABCE0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187A34[*(unsigned short *)((char *)param_1 + 2)](); + D_801ABCE0 = D_801ABCE0 - 1; + if (D_801ABCE0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187A14; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187A14); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187A24; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187A24); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187A74[])(void); + +void func_80157DC4(void *a0) { + D_80187A74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187A7C[])(void); + +void func_80157FC4(void *a0) { + D_80187A7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187A48; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187A48); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187A88[])(void); + +void func_8015824C(void *a0) { + D_80187A88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187A58; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187A58); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801ABCE8; +extern s32 D_801ABCF4; +extern s32 D_801ABCF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801ABCE8 = 0; + D_801ABCF4 = 1; + D_801ABCF8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801ABCE8; +extern s32 D_801ABCF4; +extern s32 D_801ABCF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801ABCE8 = 0; + D_801ABCF4 = 1; + D_801ABCF8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187AC4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187AC4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801ABCE8; + +void func_80158BB0(void *arg0) { + if (D_801ABCE8 == 0) { + D_801ABCE8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801ABCF4; +extern s32 D_80187A98[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801ABCF4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187A98[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801ABCF8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801ABCF8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801ABCE8; +extern s32 D_801ABCF0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801ABCE8 == 4) { + D_801ABCE8 = 5; + } + if (D_801ABCF0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187B00[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187B00; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_801594E8); + + +extern void (*D_80187D14[])(void); + +void func_80159698(void *a0) { + D_80187D14[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187B34)); + func_80028620(1, &(*(u8 *)&D_80187B34) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187B34) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187DB8[])(void); + +void func_80159968(void *a0) { + D_80187DB8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187F0C[])(void); + +void func_80159B70(void *a0) { + D_80187F0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187D28; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187D28); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_112/nonmatchings/ov_SC03_112_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187F14[])(void); + +void func_8015A264(void *a0) { + D_80187F14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187D38; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187D38); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_112/ov_SC03_112_jr_8015A3C8.c b/src/ov_SC03_112/ov_SC03_112_jr_8015A3C8.c new file mode 100644 index 000000000..ee616772b --- /dev/null +++ b/src/ov_SC03_112/ov_SC03_112_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187C60; +extern u8 D_80187BD0; +extern u8 D_80187BAC; +extern u8 D_80187B88; +extern u8 D_80187C3C; +extern u8 D_80187C18; +extern u8 D_80187BF4; +extern u8 D_80187B64; +extern void func_80145934(void); +extern u8 D_80187CF0; +extern u8 D_80187CCC; +extern u8 D_80187CA8; +extern u8 D_80187C84; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801870E8[]; +extern unsigned char D_80187118[]; +extern unsigned char D_80187168[]; +extern unsigned char D_80187198[]; +extern unsigned char D_801871C8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187218[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801872E0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187368[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80187370; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ABCA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ABCAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801873A0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187448[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018746C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018745C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018748C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018749C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801874B4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801874A4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801874C8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801874E4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801874D4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801874F8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018750C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187520; +extern void (*D_80187548[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187528; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187594[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187598[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801879FC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187A0C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ABCE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187A34[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187A14; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187A24; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187A74[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187A7C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187A48; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187A88[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187A58; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ABCE8; +extern s32 D_801ABCF4; +extern s32 D_801ABCF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187AC4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187A98[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ABCF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187D14[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187B34[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187DB8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187F0C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187D28; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187F14[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187D38; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187DC4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80187D48; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187DC4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80187D48); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187DC4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187D58 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187D58; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80187D58); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187F1C[])(void); + +void func_8015AD3C(void *a0) { + D_80187F1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_113/ov_SC03_113_after.c b/src/ov_SC03_113/ov_SC03_113_after.c index b3b1a76e2..bc0ac9942 100644 --- a/src/ov_SC03_113/ov_SC03_113_after.c +++ b/src/ov_SC03_113/ov_SC03_113_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_113/nonmatchings/ov_SC03_113_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80184C04[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80184C04[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80184C44[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80184C44[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80184C48[])(void); - -void func_80155580(void *a0) { - D_80184C48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80184E3C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80184E3C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801850AC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801850AC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801850AC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801850BC[])(void); - -void func_80157544(void *a0) { - D_801850BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A4870; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A4870 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A4870 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801850E4[])(void); -extern int D_801A4870; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801850E4[*(unsigned short *)((char *)param_1 + 2)](); - D_801A4870 = D_801A4870 - 1; - if (D_801A4870 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801850C4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801850C4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801850D4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801850D4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80185124[])(void); - -void func_80157DC4(void *a0) { - D_80185124[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018512C[])(void); - -void func_80157FC4(void *a0) { - D_8018512C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801850F8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801850F8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80185138[])(void); - -void func_8015824C(void *a0) { - D_80185138[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80185108; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185108); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A4878; -extern s32 D_801A4884; -extern s32 D_801A4888; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A4878 = 0; - D_801A4884 = 1; - D_801A4888 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A4878; -extern s32 D_801A4884; -extern s32 D_801A4888; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A4878 = 0; - D_801A4884 = 1; - D_801A4888 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80185174[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80185174[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A4878; - -void func_80158BB0(void *arg0) { - if (D_801A4878 == 0) { - D_801A4878 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A4884; -extern s32 D_80185148[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A4884; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185148[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A4888; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A4888 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A4878; -extern s32 D_801A4880; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A4878 == 4) { - D_801A4878 = 5; - } - if (D_801A4880 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801851B0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801851B0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_801594E8); - - -extern void (*D_801853C4[])(void); - -void func_80159698(void *a0) { - D_801853C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801851E4)); - func_80028620(1, &(*(u8 *)&D_801851E4) + 0x10); - func_80028620(2, &(*(u8 *)&D_801851E4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185468[])(void); - -void func_80159968(void *a0) { - D_80185468[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801855BC[])(void); - -void func_80159B70(void *a0) { - D_801855BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801853D8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801853D8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801855C4[])(void); - -void func_8015A264(void *a0) { - D_801855C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801853E8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801853E8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185474[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern char D_801853F8[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185474[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801853F8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185474[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185408 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80185408; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80185408); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801855CC[])(void); - -void func_8015AD3C(void *a0) { - D_801855CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8015444C.c b/src/ov_SC03_113/ov_SC03_113_jr_8015444C.c new file mode 100644 index 000000000..9fb81e749 --- /dev/null +++ b/src/ov_SC03_113/ov_SC03_113_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185310; +extern u8 D_80185280; +extern u8 D_8018525C; +extern u8 D_80185238; +extern u8 D_801852EC; +extern u8 D_801852C8; +extern u8 D_801852A4; +extern u8 D_80185214; +extern void func_80145934(void); +extern u8 D_801853A0; +extern u8 D_8018537C; +extern u8 D_80185358; +extern u8 D_80185334; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184798[]; +extern unsigned char D_801847C8[]; +extern unsigned char D_80184818[]; +extern unsigned char D_80184848[]; +extern unsigned char D_80184878[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801848C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184990[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184A18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184A20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A483C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184A50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184AF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184B1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184B0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184B30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184B3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184B4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184B64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184B54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184B78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184B94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184B84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184BA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184BBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184BD0; +extern void (*D_80184BF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184BD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80184C04[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80184C04[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80184C44[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80184C44[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80184C48[])(void); + +void func_80155580(void *a0) { + D_80184C48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80184E3C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80184E3C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801850AC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801850AC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801850AC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801850BC[])(void); + +void func_80157544(void *a0) { + D_801850BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A4870; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A4870 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A4870 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801850E4[])(void); +extern int D_801A4870; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801850E4[*(unsigned short *)((char *)param_1 + 2)](); + D_801A4870 = D_801A4870 - 1; + if (D_801A4870 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801850C4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801850C4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801850D4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801850D4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80185124[])(void); + +void func_80157DC4(void *a0) { + D_80185124[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018512C[])(void); + +void func_80157FC4(void *a0) { + D_8018512C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801850F8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801850F8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80185138[])(void); + +void func_8015824C(void *a0) { + D_80185138[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80185108; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80185108); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A4878; +extern s32 D_801A4884; +extern s32 D_801A4888; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A4878 = 0; + D_801A4884 = 1; + D_801A4888 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A4878; +extern s32 D_801A4884; +extern s32 D_801A4888; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A4878 = 0; + D_801A4884 = 1; + D_801A4888 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80185174[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80185174[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A4878; + +void func_80158BB0(void *arg0) { + if (D_801A4878 == 0) { + D_801A4878 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A4884; +extern s32 D_80185148[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A4884; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80185148[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A4888; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A4888 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A4878; +extern s32 D_801A4880; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A4878 == 4) { + D_801A4878 = 5; + } + if (D_801A4880 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801851B0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801851B0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_801594E8); + + +extern void (*D_801853C4[])(void); + +void func_80159698(void *a0) { + D_801853C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801851E4)); + func_80028620(1, &(*(u8 *)&D_801851E4) + 0x10); + func_80028620(2, &(*(u8 *)&D_801851E4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185468[])(void); + +void func_80159968(void *a0) { + D_80185468[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801855BC[])(void); + +void func_80159B70(void *a0) { + D_801855BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801853D8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801853D8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801855C4[])(void); + +void func_8015A264(void *a0) { + D_801855C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801853E8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801853E8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_113/ov_SC03_113_jr_8015A3C8.c b/src/ov_SC03_113/ov_SC03_113_jr_8015A3C8.c new file mode 100644 index 000000000..b7ba6dbb9 --- /dev/null +++ b/src/ov_SC03_113/ov_SC03_113_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185310; +extern u8 D_80185280; +extern u8 D_8018525C; +extern u8 D_80185238; +extern u8 D_801852EC; +extern u8 D_801852C8; +extern u8 D_801852A4; +extern u8 D_80185214; +extern void func_80145934(void); +extern u8 D_801853A0; +extern u8 D_8018537C; +extern u8 D_80185358; +extern u8 D_80185334; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184798[]; +extern unsigned char D_801847C8[]; +extern unsigned char D_80184818[]; +extern unsigned char D_80184848[]; +extern unsigned char D_80184878[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801848C8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184990[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184A18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184A20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A4838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A483C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184A50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184AF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184B1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184B0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184B30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184B3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184B4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184B64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184B54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184B78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184B94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184B84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184BA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184BBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184BD0; +extern void (*D_80184BF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184BD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80184C44[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184C48[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801850AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801850BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A4870; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801850E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801850C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801850D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185124[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018512C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801850F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80185138[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80185108; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A4878; +extern s32 D_801A4884; +extern s32 D_801A4888; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185174[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80185148[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A4880; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801853C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801851E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185468[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801855BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801853D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801855C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801853E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185474[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char D_801853F8[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185474[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801853F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185474[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80185408 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80185408; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80185408); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801855CC[])(void); + +void func_8015AD3C(void *a0) { + D_801855CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_114/ov_SC03_114_after.c b/src/ov_SC03_114/ov_SC03_114_after.c index 7d55bccd4..376bea23f 100644 --- a/src/ov_SC03_114/ov_SC03_114_after.c +++ b/src/ov_SC03_114/ov_SC03_114_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_114/nonmatchings/ov_SC03_114_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018086C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018086C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801808AC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801808AC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801808B0[])(void); - -void func_80155580(void *a0) { - D_801808B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180AA4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180AA4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180D14 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180D14[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180D14[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180D24[])(void); - -void func_80157544(void *a0) { - D_80180D24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A8508; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A8508 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A8508 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180D4C[])(void); -extern int D_801A8508; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180D4C[*(unsigned short *)((char *)param_1 + 2)](); - D_801A8508 = D_801A8508 - 1; - if (D_801A8508 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180D2C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180D2C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180D3C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180D3C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180D8C[])(void); - -void func_80157DC4(void *a0) { - D_80180D8C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180D94[])(void); - -void func_80157FC4(void *a0) { - D_80180D94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180D60; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180D60); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180DA0[])(void); - -void func_8015824C(void *a0) { - D_80180DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180D70; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180D70); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A8510; -extern s32 D_801A851C; -extern s32 D_801A8520; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A8510 = 0; - D_801A851C = 1; - D_801A8520 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A8510; -extern s32 D_801A851C; -extern s32 D_801A8520; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A8510 = 0; - D_801A851C = 1; - D_801A8520 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180DDC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180DDC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A8510; - -void func_80158BB0(void *arg0) { - if (D_801A8510 == 0) { - D_801A8510 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A851C; -extern s32 D_80180DB0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A851C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180DB0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A8520; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A8520 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A8510; -extern s32 D_801A8518; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A8510 == 4) { - D_801A8510 = 5; - } - if (D_801A8518 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180E18[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180E18; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_801594E8); - - -extern void (*D_8018102C[])(void); - -void func_80159698(void *a0) { - D_8018102C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180E4C)); - func_80028620(1, &(*(u8 *)&D_80180E4C) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180E4C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801810D0[])(void); - -void func_80159968(void *a0) { - D_801810D0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181224[])(void); - -void func_80159B70(void *a0) { - D_80181224[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181040; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181040); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018122C[])(void); - -void func_8015A264(void *a0) { - D_8018122C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181050; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181050); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801810DC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80181060; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801810DC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181060); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801810DC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181070 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181070; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181070); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181234[])(void); - -void func_8015AD3C(void *a0) { - D_80181234[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8015444C.c b/src/ov_SC03_114/ov_SC03_114_jr_8015444C.c new file mode 100644 index 000000000..434d797fb --- /dev/null +++ b/src/ov_SC03_114/ov_SC03_114_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180F78; +extern u8 D_80180EE8; +extern u8 D_80180EC4; +extern u8 D_80180EA0; +extern u8 D_80180F54; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180E7C; +extern void func_80145934(void); +extern u8 D_80181008; +extern u8 D_80180FE4; +extern u8 D_80180FC0; +extern u8 D_80180F9C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180400[]; +extern unsigned char D_80180430[]; +extern unsigned char D_80180480[]; +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180530[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801805F8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180680[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180688; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A84D0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A84D4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801806B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180760[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180784[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180774; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180798[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801807CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801807BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801807FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801807EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180810[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180824[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180838; +extern void (*D_80180860[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180840; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018086C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018086C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801808AC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801808AC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801808B0[])(void); + +void func_80155580(void *a0) { + D_801808B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180AA4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180AA4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180D14 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D14[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180D14[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180D24[])(void); + +void func_80157544(void *a0) { + D_80180D24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A8508; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A8508 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A8508 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180D4C[])(void); +extern int D_801A8508; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180D4C[*(unsigned short *)((char *)param_1 + 2)](); + D_801A8508 = D_801A8508 - 1; + if (D_801A8508 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D2C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180D2C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180D3C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180D3C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180D8C[])(void); + +void func_80157DC4(void *a0) { + D_80180D8C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180D94[])(void); + +void func_80157FC4(void *a0) { + D_80180D94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180D60; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180D60); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180DA0[])(void); + +void func_8015824C(void *a0) { + D_80180DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180D70; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180D70); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A8510; +extern s32 D_801A851C; +extern s32 D_801A8520; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A8510 = 0; + D_801A851C = 1; + D_801A8520 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A8510; +extern s32 D_801A851C; +extern s32 D_801A8520; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A8510 = 0; + D_801A851C = 1; + D_801A8520 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180DDC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180DDC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A8510; + +void func_80158BB0(void *arg0) { + if (D_801A8510 == 0) { + D_801A8510 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A851C; +extern s32 D_80180DB0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A851C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180DB0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A8520; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A8520 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8510; +extern s32 D_801A8518; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A8510 == 4) { + D_801A8510 = 5; + } + if (D_801A8518 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180E18[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180E18; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_801594E8); + + +extern void (*D_8018102C[])(void); + +void func_80159698(void *a0) { + D_8018102C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180E4C)); + func_80028620(1, &(*(u8 *)&D_80180E4C) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180E4C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801810D0[])(void); + +void func_80159968(void *a0) { + D_801810D0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181224[])(void); + +void func_80159B70(void *a0) { + D_80181224[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181040; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181040); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_114/nonmatchings/ov_SC03_114_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018122C[])(void); + +void func_8015A264(void *a0) { + D_8018122C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181050; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181050); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_114/ov_SC03_114_jr_8015A3C8.c b/src/ov_SC03_114/ov_SC03_114_jr_8015A3C8.c new file mode 100644 index 000000000..c2673cfda --- /dev/null +++ b/src/ov_SC03_114/ov_SC03_114_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180F78; +extern u8 D_80180EE8; +extern u8 D_80180EC4; +extern u8 D_80180EA0; +extern u8 D_80180F54; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180E7C; +extern void func_80145934(void); +extern u8 D_80181008; +extern u8 D_80180FE4; +extern u8 D_80180FC0; +extern u8 D_80180F9C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180400[]; +extern unsigned char D_80180430[]; +extern unsigned char D_80180480[]; +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180530[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801805F8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180680[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180688; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A84D0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A84D4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801806B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180760[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180784[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180774; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180798[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801807CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801807BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801807FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801807EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180810[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180824[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180838; +extern void (*D_80180860[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180840; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801808AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801808B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D14[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180D24[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A8508; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180D4C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D2C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180D3C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180D8C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180D94[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180D60; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180DA0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180D70; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8510; +extern s32 D_801A851C; +extern s32 D_801A8520; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180DDC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180DB0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8518; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018102C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180E4C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801810D0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181224[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181040; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018122C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181050; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801810DC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80181060; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801810DC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181060); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801810DC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181070 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181070; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181070); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181234[])(void); + +void func_8015AD3C(void *a0) { + D_80181234[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_115/ov_SC03_115_after.c b/src/ov_SC03_115/ov_SC03_115_after.c index c66cf230f..72a29bfc5 100644 --- a/src/ov_SC03_115/ov_SC03_115_after.c +++ b/src/ov_SC03_115/ov_SC03_115_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_115/nonmatchings/ov_SC03_115_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801822D8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801822D8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182318[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182318[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018231C[])(void); - -void func_80155580(void *a0) { - D_8018231C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182510[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182510[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182780 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182780[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182780[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182790[])(void); - -void func_80157544(void *a0) { - D_80182790[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80193E60; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80193E60 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80193E60 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801827B8[])(void); -extern int D_80193E60; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801827B8[*(unsigned short *)((char *)param_1 + 2)](); - D_80193E60 = D_80193E60 - 1; - if (D_80193E60 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80182798; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182798); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801827A8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801827A8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801827F8[])(void); - -void func_80157DC4(void *a0) { - D_801827F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182800[])(void); - -void func_80157FC4(void *a0) { - D_80182800[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801827CC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801827CC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018280C[])(void); - -void func_8015824C(void *a0) { - D_8018280C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801827DC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801827DC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80193E68; -extern s32 D_80193E74; -extern s32 D_80193E78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80193E68 = 0; - D_80193E74 = 1; - D_80193E78 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80193E68; -extern s32 D_80193E74; -extern s32 D_80193E78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80193E68 = 0; - D_80193E74 = 1; - D_80193E78 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80182848[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80182848[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80193E68; - -void func_80158BB0(void *arg0) { - if (D_80193E68 == 0) { - D_80193E68 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80193E74; -extern s32 D_8018281C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80193E74; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018281C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80193E78; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80193E78 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80193E68; -extern s32 D_80193E70; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80193E68 == 4) { - D_80193E68 = 5; - } - if (D_80193E70 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182884[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182884; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_801594E8); - - -extern void (*D_80182A98[])(void); - -void func_80159698(void *a0) { - D_80182A98[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801828B8)); - func_80028620(1, &(*(u8 *)&D_801828B8) + 0x10); - func_80028620(2, &(*(u8 *)&D_801828B8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80182B3C[])(void); - -void func_80159968(void *a0) { - D_80182B3C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80182C90[])(void); - -void func_80159B70(void *a0) { - D_80182C90[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80182AAC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182AAC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80182C98[])(void); - -void func_8015A264(void *a0) { - D_80182C98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80182ABC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182ABC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182B48[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern ImgRect8 D_80182ACC[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182B48[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182ACC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182B48[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182ADC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182ADC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182ADC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80182CA0[])(void); - -void func_8015AD3C(void *a0) { - D_80182CA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8015444C.c b/src/ov_SC03_115/ov_SC03_115_jr_8015444C.c new file mode 100644 index 000000000..bf1ca5f8b --- /dev/null +++ b/src/ov_SC03_115/ov_SC03_115_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801829E4; +extern u8 D_80182954; +extern u8 D_80182930; +extern u8 D_8018290C; +extern u8 D_801829C0; +extern u8 D_8018299C; +extern u8 D_80182978; +extern u8 D_801828E8; +extern void func_80145934(void); +extern u8 D_80182A74; +extern u8 D_80182A50; +extern u8 D_80182A2C; +extern u8 D_80182A08; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E6C[]; +extern unsigned char D_80181E9C[]; +extern unsigned char D_80181EEC[]; +extern unsigned char D_80181F1C[]; +extern unsigned char D_80181F4C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F9C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182064[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801820EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801820F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182124; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801821CC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801821F0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801821E0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182204[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182210[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182220[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182238[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182228; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018224C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182268[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182258; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018227C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182290[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801822A4; +extern void (*D_801822CC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801822AC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801822D8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801822D8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182318[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182318[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018231C[])(void); + +void func_80155580(void *a0) { + D_8018231C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182510[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182510[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182780 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182780[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182780[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182790[])(void); + +void func_80157544(void *a0) { + D_80182790[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80193E60; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80193E60 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80193E60 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801827B8[])(void); +extern int D_80193E60; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801827B8[*(unsigned short *)((char *)param_1 + 2)](); + D_80193E60 = D_80193E60 - 1; + if (D_80193E60 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182798; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182798); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801827A8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801827A8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801827F8[])(void); + +void func_80157DC4(void *a0) { + D_801827F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182800[])(void); + +void func_80157FC4(void *a0) { + D_80182800[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801827CC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801827CC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018280C[])(void); + +void func_8015824C(void *a0) { + D_8018280C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801827DC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801827DC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80193E68; +extern s32 D_80193E74; +extern s32 D_80193E78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80193E68 = 0; + D_80193E74 = 1; + D_80193E78 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80193E68; +extern s32 D_80193E74; +extern s32 D_80193E78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80193E68 = 0; + D_80193E74 = 1; + D_80193E78 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80182848[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80182848[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80193E68; + +void func_80158BB0(void *arg0) { + if (D_80193E68 == 0) { + D_80193E68 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80193E74; +extern s32 D_8018281C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80193E74; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018281C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80193E78; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80193E78 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E68; +extern s32 D_80193E70; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80193E68 == 4) { + D_80193E68 = 5; + } + if (D_80193E70 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182884[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182884; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_801594E8); + + +extern void (*D_80182A98[])(void); + +void func_80159698(void *a0) { + D_80182A98[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801828B8)); + func_80028620(1, &(*(u8 *)&D_801828B8) + 0x10); + func_80028620(2, &(*(u8 *)&D_801828B8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80182B3C[])(void); + +void func_80159968(void *a0) { + D_80182B3C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80182C90[])(void); + +void func_80159B70(void *a0) { + D_80182C90[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80182AAC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182AAC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_115/nonmatchings/ov_SC03_115_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80182C98[])(void); + +void func_8015A264(void *a0) { + D_80182C98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80182ABC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182ABC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_115/ov_SC03_115_jr_8015A3C8.c b/src/ov_SC03_115/ov_SC03_115_jr_8015A3C8.c new file mode 100644 index 000000000..c0c8fac79 --- /dev/null +++ b/src/ov_SC03_115/ov_SC03_115_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801829E4; +extern u8 D_80182954; +extern u8 D_80182930; +extern u8 D_8018290C; +extern u8 D_801829C0; +extern u8 D_8018299C; +extern u8 D_80182978; +extern u8 D_801828E8; +extern void func_80145934(void); +extern u8 D_80182A74; +extern u8 D_80182A50; +extern u8 D_80182A2C; +extern u8 D_80182A08; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E6C[]; +extern unsigned char D_80181E9C[]; +extern unsigned char D_80181EEC[]; +extern unsigned char D_80181F1C[]; +extern unsigned char D_80181F4C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F9C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182064[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801820EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801820F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80193E28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80193E2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80182124; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801821CC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801821F0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801821E0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80182204[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80182210[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80182220[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80182238[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80182228; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018224C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182268[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182258; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018227C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182290[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801822A4; +extern void (*D_801822CC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801822AC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182318[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018231C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182780[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182790[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80193E60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801827B8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182798; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801827A8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801827F8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182800[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801827CC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018280C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801827DC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80193E68; +extern s32 D_80193E74; +extern s32 D_80193E78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182848[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018281C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193E70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182A98[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801828B8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182B3C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182C90[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182AAC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182C98[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182ABC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182B48[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern ImgRect8 D_80182ACC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182B48[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182ACC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182B48[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182ADC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182ADC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182ADC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80182CA0[])(void); + +void func_8015AD3C(void *a0) { + D_80182CA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_116/ov_SC03_116_after.c b/src/ov_SC03_116/ov_SC03_116_after.c index 65ac726cf..9f813b657 100644 --- a/src/ov_SC03_116/ov_SC03_116_after.c +++ b/src/ov_SC03_116/ov_SC03_116_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_116/nonmatchings/ov_SC03_116_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801846DC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801846DC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018471C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018471C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80184720[])(void); - -void func_80155580(void *a0) { - D_80184720[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80184914[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80184914[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184B84 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184B84[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184B84[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184B94[])(void); - -void func_80157544(void *a0) { - D_80184B94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801969F0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801969F0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801969F0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184BBC[])(void); -extern int D_801969F0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184BBC[*(unsigned short *)((char *)param_1 + 2)](); - D_801969F0 = D_801969F0 - 1; - if (D_801969F0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184B9C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184B9C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184BAC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184BAC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80184BFC[])(void); - -void func_80157DC4(void *a0) { - D_80184BFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184C04[])(void); - -void func_80157FC4(void *a0) { - D_80184C04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184BD0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184BD0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80184C10[])(void); - -void func_8015824C(void *a0) { - D_80184C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184BE0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184BE0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801969F8; -extern s32 D_80196A04; -extern s32 D_80196A08; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801969F8 = 0; - D_80196A04 = 1; - D_80196A08 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801969F8; -extern s32 D_80196A04; -extern s32 D_80196A08; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801969F8 = 0; - D_80196A04 = 1; - D_80196A08 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184C4C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184C4C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801969F8; - -void func_80158BB0(void *arg0) { - if (D_801969F8 == 0) { - D_801969F8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80196A04; -extern s32 D_80184C20[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80196A04; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184C20[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80196A08; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80196A08 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801969F8; -extern s32 D_80196A00; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801969F8 == 4) { - D_801969F8 = 5; - } - if (D_80196A00 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184C88[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184C88; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_801594E8); - - -extern void (*D_80184E9C[])(void); - -void func_80159698(void *a0) { - D_80184E9C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184CBC)); - func_80028620(1, &(*(u8 *)&D_80184CBC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184CBC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184F40[])(void); - -void func_80159968(void *a0) { - D_80184F40[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185094[])(void); - -void func_80159B70(void *a0) { - D_80185094[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184EB0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184EB0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018509C[])(void); - -void func_8015A264(void *a0) { - D_8018509C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184EC0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184EC0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184F4C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80184ED0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184F4C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184ED0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184F4C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184EE0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184EE0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184EE0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801850A4[])(void); - -void func_8015AD3C(void *a0) { - D_801850A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8015444C.c b/src/ov_SC03_116/ov_SC03_116_jr_8015444C.c new file mode 100644 index 000000000..d6b3d8e2d --- /dev/null +++ b/src/ov_SC03_116/ov_SC03_116_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184DE8; +extern u8 D_80184D58; +extern u8 D_80184D34; +extern u8 D_80184D10; +extern u8 D_80184DC4; +extern u8 D_80184DA0; +extern u8 D_80184D7C; +extern u8 D_80184CEC; +extern void func_80145934(void); +extern u8 D_80184E78; +extern u8 D_80184E54; +extern u8 D_80184E30; +extern u8 D_80184E0C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184270[]; +extern unsigned char D_801842A0[]; +extern unsigned char D_801842F0[]; +extern unsigned char D_80184320[]; +extern unsigned char D_80184350[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801843A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184468[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801844F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801844F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801969B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801969BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184528; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801845D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801845F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801845E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184608[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184614[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184624[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018463C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018462C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184650[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018466C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018465C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184680[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184694[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801846A8; +extern void (*D_801846D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801846B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801846DC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801846DC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018471C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018471C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80184720[])(void); + +void func_80155580(void *a0) { + D_80184720[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80184914[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80184914[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184B84 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184B84[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184B84[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184B94[])(void); + +void func_80157544(void *a0) { + D_80184B94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801969F0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801969F0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801969F0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184BBC[])(void); +extern int D_801969F0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184BBC[*(unsigned short *)((char *)param_1 + 2)](); + D_801969F0 = D_801969F0 - 1; + if (D_801969F0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184B9C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184B9C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184BAC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184BAC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80184BFC[])(void); + +void func_80157DC4(void *a0) { + D_80184BFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184C04[])(void); + +void func_80157FC4(void *a0) { + D_80184C04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184BD0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184BD0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80184C10[])(void); + +void func_8015824C(void *a0) { + D_80184C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184BE0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184BE0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801969F8; +extern s32 D_80196A04; +extern s32 D_80196A08; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801969F8 = 0; + D_80196A04 = 1; + D_80196A08 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801969F8; +extern s32 D_80196A04; +extern s32 D_80196A08; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801969F8 = 0; + D_80196A04 = 1; + D_80196A08 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184C4C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184C4C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801969F8; + +void func_80158BB0(void *arg0) { + if (D_801969F8 == 0) { + D_801969F8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80196A04; +extern s32 D_80184C20[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80196A04; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184C20[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80196A08; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80196A08 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801969F8; +extern s32 D_80196A00; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801969F8 == 4) { + D_801969F8 = 5; + } + if (D_80196A00 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184C88[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184C88; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_801594E8); + + +extern void (*D_80184E9C[])(void); + +void func_80159698(void *a0) { + D_80184E9C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184CBC)); + func_80028620(1, &(*(u8 *)&D_80184CBC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184CBC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184F40[])(void); + +void func_80159968(void *a0) { + D_80184F40[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185094[])(void); + +void func_80159B70(void *a0) { + D_80185094[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184EB0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184EB0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_116/nonmatchings/ov_SC03_116_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018509C[])(void); + +void func_8015A264(void *a0) { + D_8018509C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184EC0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184EC0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_116/ov_SC03_116_jr_8015A3C8.c b/src/ov_SC03_116/ov_SC03_116_jr_8015A3C8.c new file mode 100644 index 000000000..d7ef2466c --- /dev/null +++ b/src/ov_SC03_116/ov_SC03_116_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184DE8; +extern u8 D_80184D58; +extern u8 D_80184D34; +extern u8 D_80184D10; +extern u8 D_80184DC4; +extern u8 D_80184DA0; +extern u8 D_80184D7C; +extern u8 D_80184CEC; +extern void func_80145934(void); +extern u8 D_80184E78; +extern u8 D_80184E54; +extern u8 D_80184E30; +extern u8 D_80184E0C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184270[]; +extern unsigned char D_801842A0[]; +extern unsigned char D_801842F0[]; +extern unsigned char D_80184320[]; +extern unsigned char D_80184350[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801843A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184468[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801844F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801844F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801969B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801969BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184528; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801845D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801845F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801845E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184608[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184614[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184624[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018463C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018462C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184650[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018466C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018465C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184680[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184694[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801846A8; +extern void (*D_801846D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801846B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018471C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184720[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184B84[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184B94[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801969F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184BBC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184B9C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184BAC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184BFC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184C04[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184BD0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184C10[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184BE0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801969F8; +extern s32 D_80196A04; +extern s32 D_80196A08; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184C4C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184C20[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80196A00; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184E9C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184CBC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184F40[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185094[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184EB0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018509C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184EC0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184F4C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80184ED0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184F4C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80184ED0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184F4C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184EE0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184EE0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184EE0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801850A4[])(void); + +void func_8015AD3C(void *a0) { + D_801850A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_117/ov_SC03_117_after.c b/src/ov_SC03_117/ov_SC03_117_after.c index 52b7f084a..b4c536ac3 100644 --- a/src/ov_SC03_117/ov_SC03_117_after.c +++ b/src/ov_SC03_117/ov_SC03_117_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_117/nonmatchings/ov_SC03_117_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801866E8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801866E8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186728[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186728[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018672C[])(void); - -void func_80155580(void *a0) { - D_8018672C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186920[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186920[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186B90 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186B90[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186B90[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186BA0[])(void); - -void func_80157544(void *a0) { - D_80186BA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CD168; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CD168 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CD168 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186BC8[])(void); -extern int D_801CD168; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186BC8[*(unsigned short *)((char *)param_1 + 2)](); - D_801CD168 = D_801CD168 - 1; - if (D_801CD168 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186BA8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186BA8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186BB8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186BB8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186C08[])(void); - -void func_80157DC4(void *a0) { - D_80186C08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186C10[])(void); - -void func_80157FC4(void *a0) { - D_80186C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186BDC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186BDC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186C1C[])(void); - -void func_8015824C(void *a0) { - D_80186C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186BEC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186BEC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CD170; -extern s32 D_801CD17C; -extern s32 D_801CD180; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CD170 = 0; - D_801CD17C = 1; - D_801CD180 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CD170; -extern s32 D_801CD17C; -extern s32 D_801CD180; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CD170 = 0; - D_801CD17C = 1; - D_801CD180 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80186C58[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80186C58[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CD170; - -void func_80158BB0(void *arg0) { - if (D_801CD170 == 0) { - D_801CD170 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CD17C; -extern s32 D_80186C2C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CD17C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C2C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CD180; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CD180 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CD170; -extern s32 D_801CD178; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CD170 == 4) { - D_801CD170 = 5; - } - if (D_801CD178 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186C94[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186C94; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_801594E8); - - -extern void (*D_80186EA8[])(void); - -void func_80159698(void *a0) { - D_80186EA8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186CC8)); - func_80028620(1, &(*(u8 *)&D_80186CC8) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186CC8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186F4C[])(void); - -void func_80159968(void *a0) { - D_80186F4C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801870A0[])(void); - -void func_80159B70(void *a0) { - D_801870A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186EBC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186EBC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801870A8[])(void); - -void func_8015A264(void *a0) { - D_801870A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186ECC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186ECC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186F58[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 *D_80186EDC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186F58[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186EDC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186F58[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186EEC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186EEC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186EEC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801870B0[])(void); - -void func_8015AD3C(void *a0) { - D_801870B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8015444C.c b/src/ov_SC03_117/ov_SC03_117_jr_8015444C.c new file mode 100644 index 000000000..819823040 --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186DF4; +extern u8 D_80186D64; +extern u8 D_80186D40; +extern u8 D_80186D1C; +extern u8 D_80186DD0; +extern u8 D_80186DAC; +extern u8 D_80186D88; +extern u8 D_80186CF8; +extern void func_80145934(void); +extern u8 D_80186E84; +extern u8 D_80186E60; +extern u8 D_80186E3C; +extern u8 D_80186E18; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018627C[]; +extern unsigned char D_801862AC[]; +extern unsigned char D_801862FC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863AC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186474[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801864FC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186504; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CD130; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CD134; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186534; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801865DC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186600[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801865F0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186614[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186620[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186630[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186648[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186638; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018665C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186668; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866A0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866B4; +extern void (*D_801866DC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866BC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801866E8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801866E8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186728[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186728[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018672C[])(void); + +void func_80155580(void *a0) { + D_8018672C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186920[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186920[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186B90 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186B90[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186B90[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186BA0[])(void); + +void func_80157544(void *a0) { + D_80186BA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CD168; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CD168 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CD168 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186BC8[])(void); +extern int D_801CD168; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186BC8[*(unsigned short *)((char *)param_1 + 2)](); + D_801CD168 = D_801CD168 - 1; + if (D_801CD168 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BA8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186BA8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186BB8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186BB8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186C08[])(void); + +void func_80157DC4(void *a0) { + D_80186C08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186C10[])(void); + +void func_80157FC4(void *a0) { + D_80186C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186BDC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186BDC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186C1C[])(void); + +void func_8015824C(void *a0) { + D_80186C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186BEC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186BEC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CD170; +extern s32 D_801CD17C; +extern s32 D_801CD180; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CD170 = 0; + D_801CD17C = 1; + D_801CD180 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CD170; +extern s32 D_801CD17C; +extern s32 D_801CD180; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CD170 = 0; + D_801CD17C = 1; + D_801CD180 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80186C58[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80186C58[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CD170; + +void func_80158BB0(void *arg0) { + if (D_801CD170 == 0) { + D_801CD170 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CD17C; +extern s32 D_80186C2C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CD17C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186C2C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CD180; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CD180 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CD170; +extern s32 D_801CD178; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CD170 == 4) { + D_801CD170 = 5; + } + if (D_801CD178 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186C94[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186C94; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_801594E8); + + +extern void (*D_80186EA8[])(void); + +void func_80159698(void *a0) { + D_80186EA8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186CC8)); + func_80028620(1, &(*(u8 *)&D_80186CC8) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186CC8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186F4C[])(void); + +void func_80159968(void *a0) { + D_80186F4C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801870A0[])(void); + +void func_80159B70(void *a0) { + D_801870A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186EBC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186EBC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801870A8[])(void); + +void func_8015A264(void *a0) { + D_801870A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186ECC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186ECC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8015A3C8.c b/src/ov_SC03_117/ov_SC03_117_jr_8015A3C8.c new file mode 100644 index 000000000..eb8ee844d --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186DF4; +extern u8 D_80186D64; +extern u8 D_80186D40; +extern u8 D_80186D1C; +extern u8 D_80186DD0; +extern u8 D_80186DAC; +extern u8 D_80186D88; +extern u8 D_80186CF8; +extern void func_80145934(void); +extern u8 D_80186E84; +extern u8 D_80186E60; +extern u8 D_80186E3C; +extern u8 D_80186E18; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018627C[]; +extern unsigned char D_801862AC[]; +extern unsigned char D_801862FC[]; +extern unsigned char D_8018632C[]; +extern unsigned char D_8018635C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801863AC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186474[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801864FC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186504; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CD130; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CD134; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186534; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801865DC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186600[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801865F0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186614[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186620[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186630[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186648[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186638; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018665C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186678[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186668; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018668C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801866A0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801866B4; +extern void (*D_801866DC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801866BC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186728[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018672C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186B90[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186BA0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CD168; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186BC8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186BA8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186BB8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186C08[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186C10[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186BDC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186C1C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186BEC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CD170; +extern s32 D_801CD17C; +extern s32 D_801CD180; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186C58[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186C2C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CD178; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186EA8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186CC8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186F4C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801870A0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186EBC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801870A8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186ECC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186F58[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 *D_80186EDC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186F58[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186EDC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186F58[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186EEC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186EEC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186EEC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801870B0[])(void); + +void func_8015AD3C(void *a0) { + D_801870B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_118/ov_SC03_118_after.c b/src/ov_SC03_118/ov_SC03_118_after.c index df3d4086d..7b042c246 100644 --- a/src/ov_SC03_118/ov_SC03_118_after.c +++ b/src/ov_SC03_118/ov_SC03_118_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_118/nonmatchings/ov_SC03_118_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018B794[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018B794[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018B7D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018B7D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018B7D8[])(void); - -void func_80155580(void *a0) { - D_8018B7D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018B9CC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018B9CC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018BC3C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018BC3C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018BC3C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018BC4C[])(void); - -void func_80157544(void *a0) { - D_8018BC4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D30B8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D30B8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D30B8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018BC74[])(void); -extern int D_801D30B8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018BC74[*(unsigned short *)((char *)param_1 + 2)](); - D_801D30B8 = D_801D30B8 - 1; - if (D_801D30B8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018BC54; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018BC54); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018BC64; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018BC64); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018BCB4[])(void); - -void func_80157DC4(void *a0) { - D_8018BCB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018BCBC[])(void); - -void func_80157FC4(void *a0) { - D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018BC88; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018BC88); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018BCC8[])(void); - -void func_8015824C(void *a0) { - D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018BC98; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018BC98); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D30C0; -extern s32 D_801D30CC; -extern s32 D_801D30D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D30C0 = 0; - D_801D30CC = 1; - D_801D30D0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D30C0; -extern s32 D_801D30CC; -extern s32 D_801D30D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D30C0 = 0; - D_801D30CC = 1; - D_801D30D0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018BD04[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018BD04[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D30C0; - -void func_80158BB0(void *arg0) { - if (D_801D30C0 == 0) { - D_801D30C0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D30CC; -extern s32 D_8018BCD8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D30CC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018BCD8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D30D0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D30D0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D30C0; -extern s32 D_801D30C8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D30C0 == 4) { - D_801D30C0 = 5; - } - if (D_801D30C8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018BD40[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018BD40; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_801594E8); - - -extern void (*D_8018BF54[])(void); - -void func_80159698(void *a0) { - D_8018BF54[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018BD74)); - func_80028620(1, &(*(u8 *)&D_8018BD74) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018BD74) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018BFF8[])(void); - -void func_80159968(void *a0) { - D_8018BFF8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018C14C[])(void); - -void func_80159B70(void *a0) { - D_8018C14C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018BF68; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BF68); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018C154[])(void); - -void func_8015A264(void *a0) { - D_8018C154[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018BF78; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BF78); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018C004[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018BF88[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018C004[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BF98 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018BF98; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018BF98); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018C15C[])(void); - -void func_8015AD3C(void *a0) { - D_8018C15C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8015444C.c b/src/ov_SC03_118/ov_SC03_118_jr_8015444C.c new file mode 100644 index 000000000..100789075 --- /dev/null +++ b/src/ov_SC03_118/ov_SC03_118_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018B794[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018B794[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018B7D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018B7D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018B7D8[])(void); + +void func_80155580(void *a0) { + D_8018B7D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018B9CC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018B9CC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018BC3C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018BC3C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018BC4C[])(void); + +void func_80157544(void *a0) { + D_8018BC4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D30B8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D30B8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D30B8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018BC74[])(void); +extern int D_801D30B8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018BC74[*(unsigned short *)((char *)param_1 + 2)](); + D_801D30B8 = D_801D30B8 - 1; + if (D_801D30B8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018BC54); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018BC64); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018BCB4[])(void); + +void func_80157DC4(void *a0) { + D_8018BCB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018BCBC[])(void); + +void func_80157FC4(void *a0) { + D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018BC88; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018BC88); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018BCC8[])(void); + +void func_8015824C(void *a0) { + D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018BC98; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018BC98); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D30C0 = 0; + D_801D30CC = 1; + D_801D30D0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D30C0 = 0; + D_801D30CC = 1; + D_801D30D0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018BD04[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018BD04[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D30C0; + +void func_80158BB0(void *arg0) { + if (D_801D30C0 == 0) { + D_801D30C0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D30CC; +extern s32 D_8018BCD8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D30CC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018BCD8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D30D0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D30D0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C0; +extern s32 D_801D30C8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D30C0 == 4) { + D_801D30C0 = 5; + } + if (D_801D30C8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018BD40[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018BD40; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_801594E8); + + +extern void (*D_8018BF54[])(void); + +void func_80159698(void *a0) { + D_8018BF54[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018BD74)); + func_80028620(1, &(*(u8 *)&D_8018BD74) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018BD74) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018BFF8[])(void); + +void func_80159968(void *a0) { + D_8018BFF8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018C14C[])(void); + +void func_80159B70(void *a0) { + D_8018C14C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018BF68; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BF68); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018C154[])(void); + +void func_8015A264(void *a0) { + D_8018C154[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018BF78; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BF78); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_118/ov_SC03_118_jr_8015A3C8.c b/src/ov_SC03_118/ov_SC03_118_jr_8015A3C8.c new file mode 100644 index 000000000..6e1dbce72 --- /dev/null +++ b/src/ov_SC03_118/ov_SC03_118_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B7D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B7D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018BC4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D30B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018BC74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018BCB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018BCBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018BC88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018BCC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018BC98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BD04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018BCD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BF54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BD74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BFF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018C14C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BF68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018C154[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BF78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C004[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018BF88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BF98 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BF98; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018BF98); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018C15C[])(void); + +void func_8015AD3C(void *a0) { + D_8018C15C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_119/ov_SC03_119_after.c b/src/ov_SC03_119/ov_SC03_119_after.c index 74e452e76..27e046756 100644 --- a/src/ov_SC03_119/ov_SC03_119_after.c +++ b/src/ov_SC03_119/ov_SC03_119_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_119/nonmatchings/ov_SC03_119_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018B794[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018B794[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018B7D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018B7D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018B7D8[])(void); - -void func_80155580(void *a0) { - D_8018B7D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018B9CC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018B9CC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018BC3C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018BC3C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018BC3C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018BC4C[])(void); - -void func_80157544(void *a0) { - D_8018BC4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D30B8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D30B8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D30B8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018BC74[])(void); -extern int D_801D30B8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018BC74[*(unsigned short *)((char *)param_1 + 2)](); - D_801D30B8 = D_801D30B8 - 1; - if (D_801D30B8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018BC54; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018BC54); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018BC64; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018BC64); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018BCB4[])(void); - -void func_80157DC4(void *a0) { - D_8018BCB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018BCBC[])(void); - -void func_80157FC4(void *a0) { - D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018BC88; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018BC88); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018BCC8[])(void); - -void func_8015824C(void *a0) { - D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018BC98; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018BC98); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D30C0; -extern s32 D_801D30CC; -extern s32 D_801D30D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D30C0 = 0; - D_801D30CC = 1; - D_801D30D0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D30C0; -extern s32 D_801D30CC; -extern s32 D_801D30D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D30C0 = 0; - D_801D30CC = 1; - D_801D30D0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018BD04[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018BD04[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D30C0; - -void func_80158BB0(void *arg0) { - if (D_801D30C0 == 0) { - D_801D30C0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D30CC; -extern s32 D_8018BCD8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D30CC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018BCD8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D30D0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D30D0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D30C0; -extern s32 D_801D30C8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D30C0 == 4) { - D_801D30C0 = 5; - } - if (D_801D30C8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018BD40[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018BD40; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_801594E8); - - -extern void (*D_8018BF54[])(void); - -void func_80159698(void *a0) { - D_8018BF54[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018BD74)); - func_80028620(1, &(*(u8 *)&D_8018BD74) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018BD74) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018BFF8[])(void); - -void func_80159968(void *a0) { - D_8018BFF8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018C14C[])(void); - -void func_80159B70(void *a0) { - D_8018C14C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018BF68; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BF68); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018C154[])(void); - -void func_8015A264(void *a0) { - D_8018C154[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018BF78; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BF78); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018C004[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018BF88[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018C004[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018C004[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BF98 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018BF98; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018BF98); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018C15C[])(void); - -void func_8015AD3C(void *a0) { - D_8018C15C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8015444C.c b/src/ov_SC03_119/ov_SC03_119_jr_8015444C.c new file mode 100644 index 000000000..00001a674 --- /dev/null +++ b/src/ov_SC03_119/ov_SC03_119_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018B794[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018B794[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018B7D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018B7D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018B7D8[])(void); + +void func_80155580(void *a0) { + D_8018B7D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018B9CC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018B9CC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018BC3C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018BC3C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018BC4C[])(void); + +void func_80157544(void *a0) { + D_8018BC4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D30B8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D30B8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D30B8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018BC74[])(void); +extern int D_801D30B8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018BC74[*(unsigned short *)((char *)param_1 + 2)](); + D_801D30B8 = D_801D30B8 - 1; + if (D_801D30B8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018BC54); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018BC64); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018BCB4[])(void); + +void func_80157DC4(void *a0) { + D_8018BCB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018BCBC[])(void); + +void func_80157FC4(void *a0) { + D_8018BCBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018BC88; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018BC88); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018BCC8[])(void); + +void func_8015824C(void *a0) { + D_8018BCC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018BC98; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018BC98); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D30C0 = 0; + D_801D30CC = 1; + D_801D30D0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D30C0 = 0; + D_801D30CC = 1; + D_801D30D0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018BD04[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018BD04[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D30C0; + +void func_80158BB0(void *arg0) { + if (D_801D30C0 == 0) { + D_801D30C0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D30CC; +extern s32 D_8018BCD8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D30CC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018BCD8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D30D0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D30D0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C0; +extern s32 D_801D30C8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D30C0 == 4) { + D_801D30C0 = 5; + } + if (D_801D30C8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018BD40[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018BD40; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_801594E8); + + +extern void (*D_8018BF54[])(void); + +void func_80159698(void *a0) { + D_8018BF54[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018BD74)); + func_80028620(1, &(*(u8 *)&D_8018BD74) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018BD74) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018BFF8[])(void); + +void func_80159968(void *a0) { + D_8018BFF8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018C14C[])(void); + +void func_80159B70(void *a0) { + D_8018C14C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018BF68; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018BF68); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018C154[])(void); + +void func_8015A264(void *a0) { + D_8018C154[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018BF78; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018BF78); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8015A3C8.c b/src/ov_SC03_119/ov_SC03_119_jr_8015A3C8.c new file mode 100644 index 000000000..6e1dbce72 --- /dev/null +++ b/src/ov_SC03_119/ov_SC03_119_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018BEA0; +extern u8 D_8018BE10; +extern u8 D_8018BDEC; +extern u8 D_8018BDC8; +extern u8 D_8018BE7C; +extern u8 D_8018BE58; +extern u8 D_8018BE34; +extern u8 D_8018BDA4; +extern void func_80145934(void); +extern u8 D_8018BF30; +extern u8 D_8018BF0C; +extern u8 D_8018BEE8; +extern u8 D_8018BEC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018B328[]; +extern unsigned char D_8018B358[]; +extern unsigned char D_8018B3A8[]; +extern unsigned char D_8018B3D8[]; +extern unsigned char D_8018B408[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018B458[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018B520[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018B5A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018B5B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3080; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3084; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018B5E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018B688[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018B6AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018B69C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018B6C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018B6CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018B6DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018B6F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018B6E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018B708[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018B724[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018B714; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018B738[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018B74C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018B760; +extern void (*D_8018B788[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018B768; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018B7D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018B7D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018BC3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018BC4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D30B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018BC74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018BC54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018BC64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018BCB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018BCBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018BC88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018BCC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018BC98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D30C0; +extern s32 D_801D30CC; +extern s32 D_801D30D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018BD04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018BCD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D30C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018BF54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018BD74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018BFF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018C14C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018BF68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018C154[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018BF78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018C004[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018BF88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018C004[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018BF88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018C004[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018BF98 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018BF98; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018BF98); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018C15C[])(void); + +void func_8015AD3C(void *a0) { + D_8018C15C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_121/ov_SC03_121_after.c b/src/ov_SC03_121/ov_SC03_121_after.c index 59b563d1c..adede0505 100644 --- a/src/ov_SC03_121/ov_SC03_121_after.c +++ b/src/ov_SC03_121/ov_SC03_121_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_121/nonmatchings/ov_SC03_121_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183FB0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183FB0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183FF0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183FF0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183FF4[])(void); - -void func_80155580(void *a0) { - D_80183FF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801841E8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801841E8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184458 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184458[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184458[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184468[])(void); - -void func_80157544(void *a0) { - D_80184468[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801ADB60; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801ADB60 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801ADB60 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184490[])(void); -extern int D_801ADB60; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184490[*(unsigned short *)((char *)param_1 + 2)](); - D_801ADB60 = D_801ADB60 - 1; - if (D_801ADB60 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184470; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184470); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184480; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184480); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801844D0[])(void); - -void func_80157DC4(void *a0) { - D_801844D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801844D8[])(void); - -void func_80157FC4(void *a0) { - D_801844D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801844A4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801844A4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801844E4[])(void); - -void func_8015824C(void *a0) { - D_801844E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801844B4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801844B4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801ADB68; -extern s32 D_801ADB74; -extern s32 D_801ADB78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801ADB68 = 0; - D_801ADB74 = 1; - D_801ADB78 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801ADB68; -extern s32 D_801ADB74; -extern s32 D_801ADB78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801ADB68 = 0; - D_801ADB74 = 1; - D_801ADB78 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184520[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184520[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801ADB68; - -void func_80158BB0(void *arg0) { - if (D_801ADB68 == 0) { - D_801ADB68 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801ADB74; -extern s32 D_801844F4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801ADB74; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801844F4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801ADB78; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801ADB78 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801ADB68; -extern s32 D_801ADB70; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801ADB68 == 4) { - D_801ADB68 = 5; - } - if (D_801ADB70 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018455C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018455C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_801594E8); - - -extern void (*D_80184770[])(void); - -void func_80159698(void *a0) { - D_80184770[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184590)); - func_80028620(1, &(*(u8 *)&D_80184590) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184590) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184814[])(void); - -void func_80159968(void *a0) { - D_80184814[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184968[])(void); - -void func_80159B70(void *a0) { - D_80184968[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184784; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184784); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184970[])(void); - -void func_8015A264(void *a0) { - D_80184970[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184794; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184794); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184820[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801847A4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184820[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801847A4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184820[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801847B4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801847B4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801847B4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184978[])(void); - -void func_8015AD3C(void *a0) { - D_80184978[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8015444C.c b/src/ov_SC03_121/ov_SC03_121_jr_8015444C.c new file mode 100644 index 000000000..05e1225b8 --- /dev/null +++ b/src/ov_SC03_121/ov_SC03_121_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846BC; +extern u8 D_8018462C; +extern u8 D_80184608; +extern u8 D_801845E4; +extern u8 D_80184698; +extern u8 D_80184674; +extern u8 D_80184650; +extern u8 D_801845C0; +extern void func_80145934(void); +extern u8 D_8018474C; +extern u8 D_80184728; +extern u8 D_80184704; +extern u8 D_801846E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B44[]; +extern unsigned char D_80183B74[]; +extern unsigned char D_80183BC4[]; +extern unsigned char D_80183BF4[]; +extern unsigned char D_80183C24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DCC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ADB28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ADB2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183DFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183EC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183EF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F10[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F00; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F24[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F40[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F30; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F54[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F68[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F7C; +extern void (*D_80183FA4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F84; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183FB0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183FB0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183FF0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183FF0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183FF4[])(void); + +void func_80155580(void *a0) { + D_80183FF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801841E8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801841E8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184458 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184458[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184458[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184468[])(void); + +void func_80157544(void *a0) { + D_80184468[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801ADB60; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801ADB60 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801ADB60 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184490[])(void); +extern int D_801ADB60; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184490[*(unsigned short *)((char *)param_1 + 2)](); + D_801ADB60 = D_801ADB60 - 1; + if (D_801ADB60 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184470; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184470); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184480; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184480); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801844D0[])(void); + +void func_80157DC4(void *a0) { + D_801844D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801844D8[])(void); + +void func_80157FC4(void *a0) { + D_801844D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801844A4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801844A4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801844E4[])(void); + +void func_8015824C(void *a0) { + D_801844E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801844B4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801844B4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801ADB68; +extern s32 D_801ADB74; +extern s32 D_801ADB78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801ADB68 = 0; + D_801ADB74 = 1; + D_801ADB78 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801ADB68; +extern s32 D_801ADB74; +extern s32 D_801ADB78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801ADB68 = 0; + D_801ADB74 = 1; + D_801ADB78 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184520[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184520[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801ADB68; + +void func_80158BB0(void *arg0) { + if (D_801ADB68 == 0) { + D_801ADB68 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801ADB74; +extern s32 D_801844F4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801ADB74; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801844F4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801ADB78; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801ADB78 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801ADB68; +extern s32 D_801ADB70; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801ADB68 == 4) { + D_801ADB68 = 5; + } + if (D_801ADB70 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018455C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018455C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_801594E8); + + +extern void (*D_80184770[])(void); + +void func_80159698(void *a0) { + D_80184770[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184590)); + func_80028620(1, &(*(u8 *)&D_80184590) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184590) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184814[])(void); + +void func_80159968(void *a0) { + D_80184814[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184968[])(void); + +void func_80159B70(void *a0) { + D_80184968[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184784; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184784); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_121/nonmatchings/ov_SC03_121_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184970[])(void); + +void func_8015A264(void *a0) { + D_80184970[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184794; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184794); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_121/ov_SC03_121_jr_8015A3C8.c b/src/ov_SC03_121/ov_SC03_121_jr_8015A3C8.c new file mode 100644 index 000000000..d588523a3 --- /dev/null +++ b/src/ov_SC03_121/ov_SC03_121_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846BC; +extern u8 D_8018462C; +extern u8 D_80184608; +extern u8 D_801845E4; +extern u8 D_80184698; +extern u8 D_80184674; +extern u8 D_80184650; +extern u8 D_801845C0; +extern void func_80145934(void); +extern u8 D_8018474C; +extern u8 D_80184728; +extern u8 D_80184704; +extern u8 D_801846E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B44[]; +extern unsigned char D_80183B74[]; +extern unsigned char D_80183BC4[]; +extern unsigned char D_80183BF4[]; +extern unsigned char D_80183C24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DCC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801ADB28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801ADB2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183DFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183EC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183EF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F10[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F00; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F24[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F40[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F30; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F54[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F68[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F7C; +extern void (*D_80183FA4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F84; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183FF0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183FF4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184458[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184468[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801ADB60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184490[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184470; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184480; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801844D0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801844D8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801844A4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801844E4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801844B4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801ADB68; +extern s32 D_801ADB74; +extern s32 D_801ADB78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184520[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801844F4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801ADB70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184770[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184590[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184814[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184968[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184784; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184970[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184794; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184820[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801847A4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184820[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801847A4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184820[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801847B4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801847B4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801847B4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184978[])(void); + +void func_8015AD3C(void *a0) { + D_80184978[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_124/ov_SC03_124_after.c b/src/ov_SC03_124/ov_SC03_124_after.c index 06bc5bfa4..ac3b31d23 100644 --- a/src/ov_SC03_124/ov_SC03_124_after.c +++ b/src/ov_SC03_124/ov_SC03_124_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_124/nonmatchings/ov_SC03_124_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018C9DC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018C9DC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018CA1C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018CA1C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018CA20[])(void); - -void func_80155580(void *a0) { - D_8018CA20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018CC14[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018CC14[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CE84 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018CE84[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018CE84[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018CE94[])(void); - -void func_80157544(void *a0) { - D_8018CE94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E0688; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E0688 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E0688 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018CEBC[])(void); -extern int D_801E0688; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018CEBC[*(unsigned short *)((char *)param_1 + 2)](); - D_801E0688 = D_801E0688 - 1; - if (D_801E0688 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018CE9C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CE9C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018CEAC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEAC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018CEFC[])(void); - -void func_80157DC4(void *a0) { - D_8018CEFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018CF04[])(void); - -void func_80157FC4(void *a0) { - D_8018CF04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018CED0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018CED0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018CF10[])(void); - -void func_8015824C(void *a0) { - D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018CEE0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CEE0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E0690; -extern s32 D_801E069C; -extern s32 D_801E06A0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E0690 = 0; - D_801E069C = 1; - D_801E06A0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E0690; -extern s32 D_801E069C; -extern s32 D_801E06A0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E0690 = 0; - D_801E069C = 1; - D_801E06A0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018CF4C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018CF4C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E0690; - -void func_80158BB0(void *arg0) { - if (D_801E0690 == 0) { - D_801E0690 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E069C; -extern s32 D_8018CF20[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E069C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF20[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E06A0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E06A0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E0690; -extern s32 D_801E0698; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E0690 == 4) { - D_801E0690 = 5; - } - if (D_801E0698 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018CF88[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018CF88; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_801594E8); - - -extern void (*D_8018D19C[])(void); - -void func_80159698(void *a0) { - D_8018D19C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018CFBC)); - func_80028620(1, &(*(u8 *)&D_8018CFBC) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018CFBC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018D240[])(void); - -void func_80159968(void *a0) { - D_8018D240[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018D394[])(void); - -void func_80159B70(void *a0) { - D_8018D394[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018D1B0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1B0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018D39C[])(void); - -void func_8015A264(void *a0) { - D_8018D39C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018D1C0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D1C0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018D24C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018D1D0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018D24C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D1D0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018D24C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D1E0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018D1E0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018D1E0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018D3A4[])(void); - -void func_8015AD3C(void *a0) { - D_8018D3A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8015444C.c b/src/ov_SC03_124/ov_SC03_124_jr_8015444C.c new file mode 100644 index 000000000..3505f5d1d --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D0E8; +extern u8 D_8018D058; +extern u8 D_8018D034; +extern u8 D_8018D010; +extern u8 D_8018D0C4; +extern u8 D_8018D0A0; +extern u8 D_8018D07C; +extern u8 D_8018CFEC; +extern void func_80145934(void); +extern u8 D_8018D178; +extern u8 D_8018D154; +extern u8 D_8018D130; +extern u8 D_8018D10C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C570[]; +extern unsigned char D_8018C5A0[]; +extern unsigned char D_8018C5F0[]; +extern unsigned char D_8018C620[]; +extern unsigned char D_8018C650[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C768[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C7F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C7F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0650; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0654; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C828; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C8D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C8F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C8E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C908[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C914[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C924[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C93C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C92C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C950[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C96C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C95C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C980[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C994[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9A8; +extern void (*D_8018C9D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018C9DC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018C9DC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018CA1C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018CA1C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018CA20[])(void); + +void func_80155580(void *a0) { + D_8018CA20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018CC14[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018CC14[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018CE84 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CE84[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018CE84[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018CE94[])(void); + +void func_80157544(void *a0) { + D_8018CE94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E0688; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E0688 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E0688 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018CEBC[])(void); +extern int D_801E0688; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018CEBC[*(unsigned short *)((char *)param_1 + 2)](); + D_801E0688 = D_801E0688 - 1; + if (D_801E0688 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CE9C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018CE9C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018CEAC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018CEAC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018CEFC[])(void); + +void func_80157DC4(void *a0) { + D_8018CEFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018CF04[])(void); + +void func_80157FC4(void *a0) { + D_8018CF04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018CED0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018CED0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018CF10[])(void); + +void func_8015824C(void *a0) { + D_8018CF10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018CEE0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018CEE0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E0690; +extern s32 D_801E069C; +extern s32 D_801E06A0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E0690 = 0; + D_801E069C = 1; + D_801E06A0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E0690; +extern s32 D_801E069C; +extern s32 D_801E06A0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E0690 = 0; + D_801E069C = 1; + D_801E06A0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018CF4C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018CF4C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E0690; + +void func_80158BB0(void *arg0) { + if (D_801E0690 == 0) { + D_801E0690 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E069C; +extern s32 D_8018CF20[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E069C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018CF20[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E06A0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E06A0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0690; +extern s32 D_801E0698; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E0690 == 4) { + D_801E0690 = 5; + } + if (D_801E0698 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018CF88[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018CF88; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_801594E8); + + +extern void (*D_8018D19C[])(void); + +void func_80159698(void *a0) { + D_8018D19C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018CFBC)); + func_80028620(1, &(*(u8 *)&D_8018CFBC) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018CFBC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018D240[])(void); + +void func_80159968(void *a0) { + D_8018D240[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018D394[])(void); + +void func_80159B70(void *a0) { + D_8018D394[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018D1B0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018D1B0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018D39C[])(void); + +void func_8015A264(void *a0) { + D_8018D39C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018D1C0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018D1C0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_124/ov_SC03_124_jr_8015A3C8.c b/src/ov_SC03_124/ov_SC03_124_jr_8015A3C8.c new file mode 100644 index 000000000..eaaee8710 --- /dev/null +++ b/src/ov_SC03_124/ov_SC03_124_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018D0E8; +extern u8 D_8018D058; +extern u8 D_8018D034; +extern u8 D_8018D010; +extern u8 D_8018D0C4; +extern u8 D_8018D0A0; +extern u8 D_8018D07C; +extern u8 D_8018CFEC; +extern void func_80145934(void); +extern u8 D_8018D178; +extern u8 D_8018D154; +extern u8 D_8018D130; +extern u8 D_8018D10C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018C570[]; +extern unsigned char D_8018C5A0[]; +extern unsigned char D_8018C5F0[]; +extern unsigned char D_8018C620[]; +extern unsigned char D_8018C650[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018C6A0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018C768[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018C7F0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018C7F8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0650; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0654; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018C828; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018C8D0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018C8F4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018C8E4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018C908[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018C914[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018C924[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018C93C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018C92C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018C950[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018C96C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018C95C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018C980[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018C994[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018C9A8; +extern void (*D_8018C9D0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018C9B0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018CA1C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018CA20[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018CE84[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018CE94[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0688; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018CEBC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018CE9C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018CEAC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018CEFC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018CF04[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018CED0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018CF10[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018CEE0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0690; +extern s32 D_801E069C; +extern s32 D_801E06A0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018CF4C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018CF20[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0698; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018D19C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018CFBC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018D240[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018D394[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018D1B0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018D39C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018D1C0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018D24C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018D1D0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018D24C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018D1D0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018D24C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018D1E0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018D1E0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018D1E0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018D3A4[])(void); + +void func_8015AD3C(void *a0) { + D_8018D3A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_125/ov_SC03_125_after.c b/src/ov_SC03_125/ov_SC03_125_after.c index 976704aa7..e667911b8 100644 --- a/src/ov_SC03_125/ov_SC03_125_after.c +++ b/src/ov_SC03_125/ov_SC03_125_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_125/nonmatchings/ov_SC03_125_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80185BAC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80185BAC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80185BEC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80185BEC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80185BF0[])(void); - -void func_80155580(void *a0) { - D_80185BF0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80185DE4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80185DE4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186054 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186054[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186054[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186064[])(void); - -void func_80157544(void *a0) { - D_80186064[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C2F80; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C2F80 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C2F80 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018608C[])(void); -extern int D_801C2F80; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018608C[*(unsigned short *)((char *)param_1 + 2)](); - D_801C2F80 = D_801C2F80 - 1; - if (D_801C2F80 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018606C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018606C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018607C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018607C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801860CC[])(void); - -void func_80157DC4(void *a0) { - D_801860CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801860D4[])(void); - -void func_80157FC4(void *a0) { - D_801860D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801860A0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801860A0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801860E0[])(void); - -void func_8015824C(void *a0) { - D_801860E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801860B0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801860B0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C2F88; -extern s32 D_801C2F94; -extern s32 D_801C2F98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C2F88 = 0; - D_801C2F94 = 1; - D_801C2F98 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C2F88; -extern s32 D_801C2F94; -extern s32 D_801C2F98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C2F88 = 0; - D_801C2F94 = 1; - D_801C2F98 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018611C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018611C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C2F88; - -void func_80158BB0(void *arg0) { - if (D_801C2F88 == 0) { - D_801C2F88 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C2F94; -extern s32 D_801860F0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C2F94; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801860F0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C2F98; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C2F98 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C2F88; -extern s32 D_801C2F90; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C2F88 == 4) { - D_801C2F88 = 5; - } - if (D_801C2F90 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186158[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186158; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_801594E8); - - -extern void (*D_8018636C[])(void); - -void func_80159698(void *a0) { - D_8018636C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018618C)); - func_80028620(1, &(*(u8 *)&D_8018618C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018618C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186410[])(void); - -void func_80159968(void *a0) { - D_80186410[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186564[])(void); - -void func_80159B70(void *a0) { - D_80186564[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186380; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186380); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018656C[])(void); - -void func_8015A264(void *a0) { - D_8018656C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186390; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186390); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018641C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u16 D_801863A0[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018641C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801863A0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018641C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801863B0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801863B0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801863B0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186574[])(void); - -void func_8015AD3C(void *a0) { - D_80186574[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8015444C.c b/src/ov_SC03_125/ov_SC03_125_jr_8015444C.c new file mode 100644 index 000000000..3893acc8e --- /dev/null +++ b/src/ov_SC03_125/ov_SC03_125_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801862B8; +extern u8 D_80186228; +extern u8 D_80186204; +extern u8 D_801861E0; +extern u8 D_80186294; +extern u8 D_80186270; +extern u8 D_8018624C; +extern u8 D_801861BC; +extern void func_80145934(void); +extern u8 D_80186348; +extern u8 D_80186324; +extern u8 D_80186300; +extern u8 D_801862DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185740[]; +extern unsigned char D_80185770[]; +extern unsigned char D_801857C0[]; +extern unsigned char D_801857F0[]; +extern unsigned char D_80185820[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185870[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185938[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801859C0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801859C8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C2F48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C2F4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801859F8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185AA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185AC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185AB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185AD8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185AE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185AF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185B0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185AFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185B20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185B3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185B2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185B50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185B64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185B78; +extern void (*D_80185BA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185B80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80185BAC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80185BAC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80185BEC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80185BEC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80185BF0[])(void); + +void func_80155580(void *a0) { + D_80185BF0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80185DE4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80185DE4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186054 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186054[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186054[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186064[])(void); + +void func_80157544(void *a0) { + D_80186064[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C2F80; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C2F80 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C2F80 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018608C[])(void); +extern int D_801C2F80; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018608C[*(unsigned short *)((char *)param_1 + 2)](); + D_801C2F80 = D_801C2F80 - 1; + if (D_801C2F80 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018606C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018606C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018607C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018607C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801860CC[])(void); + +void func_80157DC4(void *a0) { + D_801860CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801860D4[])(void); + +void func_80157FC4(void *a0) { + D_801860D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801860A0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801860A0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801860E0[])(void); + +void func_8015824C(void *a0) { + D_801860E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801860B0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801860B0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C2F88; +extern s32 D_801C2F94; +extern s32 D_801C2F98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C2F88 = 0; + D_801C2F94 = 1; + D_801C2F98 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C2F88; +extern s32 D_801C2F94; +extern s32 D_801C2F98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C2F88 = 0; + D_801C2F94 = 1; + D_801C2F98 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018611C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018611C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C2F88; + +void func_80158BB0(void *arg0) { + if (D_801C2F88 == 0) { + D_801C2F88 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C2F94; +extern s32 D_801860F0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C2F94; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801860F0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C2F98; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C2F98 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C2F88; +extern s32 D_801C2F90; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C2F88 == 4) { + D_801C2F88 = 5; + } + if (D_801C2F90 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186158[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186158; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_801594E8); + + +extern void (*D_8018636C[])(void); + +void func_80159698(void *a0) { + D_8018636C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018618C)); + func_80028620(1, &(*(u8 *)&D_8018618C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018618C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186410[])(void); + +void func_80159968(void *a0) { + D_80186410[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186564[])(void); + +void func_80159B70(void *a0) { + D_80186564[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186380; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186380); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018656C[])(void); + +void func_8015A264(void *a0) { + D_8018656C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186390; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186390); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8015A3C8.c b/src/ov_SC03_125/ov_SC03_125_jr_8015A3C8.c new file mode 100644 index 000000000..72a4dfba3 --- /dev/null +++ b/src/ov_SC03_125/ov_SC03_125_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801862B8; +extern u8 D_80186228; +extern u8 D_80186204; +extern u8 D_801861E0; +extern u8 D_80186294; +extern u8 D_80186270; +extern u8 D_8018624C; +extern u8 D_801861BC; +extern void func_80145934(void); +extern u8 D_80186348; +extern u8 D_80186324; +extern u8 D_80186300; +extern u8 D_801862DC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185740[]; +extern unsigned char D_80185770[]; +extern unsigned char D_801857C0[]; +extern unsigned char D_801857F0[]; +extern unsigned char D_80185820[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80185870[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80185938[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801859C0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801859C8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C2F48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C2F4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801859F8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80185AA0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185AC4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185AB4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80185AD8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80185AE4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80185AF4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185B0C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185AFC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185B20[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185B3C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185B2C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185B50[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185B64[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185B78; +extern void (*D_80185BA0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185B80; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80185BEC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80185BF0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186054[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186064[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C2F80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018608C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018606C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018607C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801860CC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801860D4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801860A0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801860E0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801860B0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C2F88; +extern s32 D_801C2F94; +extern s32 D_801C2F98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018611C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801860F0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C2F90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018636C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018618C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186410[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186564[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186380; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018656C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186390; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018641C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_801863A0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018641C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801863A0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018641C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801863B0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801863B0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801863B0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186574[])(void); + +void func_8015AD3C(void *a0) { + D_80186574[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC03_126/ov_SC03_126_after.c b/src/ov_SC03_126/ov_SC03_126_after.c index 77962e854..4be3e7c24 100644 --- a/src/ov_SC03_126/ov_SC03_126_after.c +++ b/src/ov_SC03_126/ov_SC03_126_after.c @@ -2616,1309 +2616,3 @@ 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_SC03_126/nonmatchings/ov_SC03_126_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", 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) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801810A4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801810E4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801810E4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801810E8[])(void); - -void func_80155580(void *a0) { - D_801810E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801812DC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801812DC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018154C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018154C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018155C[])(void); - -void func_80157544(void *a0) { - D_8018155C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018E848; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018E848 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018E848 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181584[])(void); -extern int D_8018E848; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181584[*(unsigned short *)((char *)param_1 + 2)](); - D_8018E848 = D_8018E848 - 1; - if (D_8018E848 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181564; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181574; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801815C4[])(void); - -void func_80157DC4(void *a0) { - D_801815C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801815CC[])(void); - -void func_80157FC4(void *a0) { - D_801815CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181598; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181598); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801815D8[])(void); - -void func_8015824C(void *a0) { - D_801815D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801815A8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181614[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181614[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018E850; - -void func_80158BB0(void *arg0) { - if (D_8018E850 == 0) { - D_8018E850 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018E85C; -extern s32 D_801815E8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018E85C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018E860; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018E860 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018E850; -extern s32 D_8018E858; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018E850 == 4) { - D_8018E850 = 5; - } - if (D_8018E858 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181650[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181650; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_801594E8); - - -extern void (*D_80181864[])(void); - -void func_80159698(void *a0) { - D_80181864[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181684)); - func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181908[])(void); - -void func_80159968(void *a0) { - D_80181908[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181A5C[])(void); - -void func_80159B70(void *a0) { - D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181878; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181A64[])(void); - -void func_8015A264(void *a0) { - D_80181A64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181888; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181914[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80181898; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181914[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801818A8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801818A8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181A6C[])(void); - -void func_8015AD3C(void *a0) { - D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8015444C.c b/src/ov_SC03_126/ov_SC03_126_jr_8015444C.c new file mode 100644 index 000000000..cba138f9e --- /dev/null +++ b/src/ov_SC03_126/ov_SC03_126_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801810A4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801810E4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801810E4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801810E8[])(void); + +void func_80155580(void *a0) { + D_801810E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801812DC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801812DC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018154C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018155C[])(void); + +void func_80157544(void *a0) { + D_8018155C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018E848; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018E848 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018E848 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181584[])(void); +extern int D_8018E848; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181584[*(unsigned short *)((char *)param_1 + 2)](); + D_8018E848 = D_8018E848 - 1; + if (D_8018E848 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181574; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801815C4[])(void); + +void func_80157DC4(void *a0) { + D_801815C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801815CC[])(void); + +void func_80157FC4(void *a0) { + D_801815CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181598; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181598); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801815D8[])(void); + +void func_8015824C(void *a0) { + D_801815D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801815A8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181614[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181614[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018E850; + +void func_80158BB0(void *arg0) { + if (D_8018E850 == 0) { + D_8018E850 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018E85C; +extern s32 D_801815E8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018E85C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018E860; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018E860 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E850; +extern s32 D_8018E858; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018E850 == 4) { + D_8018E850 = 5; + } + if (D_8018E858 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181650[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181650; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_801594E8); + + +extern void (*D_80181864[])(void); + +void func_80159698(void *a0) { + D_80181864[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181684)); + func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181908[])(void); + +void func_80159968(void *a0) { + D_80181908[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181A5C[])(void); + +void func_80159B70(void *a0) { + D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181878; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC03_126/nonmatchings/ov_SC03_126_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181A64[])(void); + +void func_8015A264(void *a0) { + D_80181A64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181888; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC03_126/ov_SC03_126_jr_8015A3C8.c b/src/ov_SC03_126/ov_SC03_126_jr_8015A3C8.c new file mode 100644 index 000000000..43cb291ad --- /dev/null +++ b/src/ov_SC03_126/ov_SC03_126_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801818A8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181A6C[])(void); + +void func_8015AD3C(void *a0) { + D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_000/ov_SC04_000_after.c b/src/ov_SC04_000/ov_SC04_000_after.c index 05ba2665b..3a82d21eb 100644 --- a/src/ov_SC04_000/ov_SC04_000_after.c +++ b/src/ov_SC04_000/ov_SC04_000_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_000/nonmatchings/ov_SC04_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801850B0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801850B0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801850F0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801850F0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801850F4[])(void); - -void func_80155580(void *a0) { - D_801850F4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801852E8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801852E8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185558 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80185558[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80185558[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80185568[])(void); - -void func_80157544(void *a0) { - D_80185568[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A88F8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A88F8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A88F8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80185590[])(void); -extern int D_801A88F8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80185590[*(unsigned short *)((char *)param_1 + 2)](); - D_801A88F8 = D_801A88F8 - 1; - if (D_801A88F8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80185570; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185570); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80185580; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185580); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801855D0[])(void); - -void func_80157DC4(void *a0) { - D_801855D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801855D8[])(void); - -void func_80157FC4(void *a0) { - D_801855D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801855A4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801855A4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801855E4[])(void); - -void func_8015824C(void *a0) { - D_801855E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801855B4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801855B4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A8900; -extern s32 D_801A890C; -extern s32 D_801A8910; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A8900 = 0; - D_801A890C = 1; - D_801A8910 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A8900; -extern s32 D_801A890C; -extern s32 D_801A8910; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A8900 = 0; - D_801A890C = 1; - D_801A8910 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80185620[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80185620[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A8900; - -void func_80158BB0(void *arg0) { - if (D_801A8900 == 0) { - D_801A8900 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A890C; -extern s32 D_801855F4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A890C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801855F4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A8910; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A8910 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A8900; -extern s32 D_801A8908; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A8900 == 4) { - D_801A8900 = 5; - } - if (D_801A8908 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018565C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018565C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_801594E8); - - -extern void (*D_80185870[])(void); - -void func_80159698(void *a0) { - D_80185870[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80185690)); - func_80028620(1, &(*(u8 *)&D_80185690) + 0x10); - func_80028620(2, &(*(u8 *)&D_80185690) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185914[])(void); - -void func_80159968(void *a0) { - D_80185914[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185A68[])(void); - -void func_80159B70(void *a0) { - D_80185A68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80185884; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185884); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80185A70[])(void); - -void func_8015A264(void *a0) { - D_80185A70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80185894; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185894); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185920[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801858A4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185920[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801858A4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185920[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801858B4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801858B4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801858B4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80185A78[])(void); - -void func_8015AD3C(void *a0) { - D_80185A78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8015444C.c b/src/ov_SC04_000/ov_SC04_000_jr_8015444C.c new file mode 100644 index 000000000..5751f3a66 --- /dev/null +++ b/src/ov_SC04_000/ov_SC04_000_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801857BC; +extern u8 D_8018572C; +extern u8 D_80185708; +extern u8 D_801856E4; +extern u8 D_80185798; +extern u8 D_80185774; +extern u8 D_80185750; +extern u8 D_801856C0; +extern void func_80145934(void); +extern u8 D_8018584C; +extern u8 D_80185828; +extern u8 D_80185804; +extern u8 D_801857E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184C44[]; +extern unsigned char D_80184C74[]; +extern unsigned char D_80184CC4[]; +extern unsigned char D_80184CF4[]; +extern unsigned char D_80184D24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184D74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184E3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184EC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184ECC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A88C0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A88C4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184EFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184FA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184FC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184FB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184FDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184FE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184FF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185010[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185000; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185024[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185040[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185030; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185054[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185068[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018507C; +extern void (*D_801850A4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185084; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801850B0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801850B0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801850F0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801850F0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801850F4[])(void); + +void func_80155580(void *a0) { + D_801850F4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801852E8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801852E8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185558 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80185558[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80185558[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80185568[])(void); + +void func_80157544(void *a0) { + D_80185568[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A88F8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A88F8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A88F8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80185590[])(void); +extern int D_801A88F8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80185590[*(unsigned short *)((char *)param_1 + 2)](); + D_801A88F8 = D_801A88F8 - 1; + if (D_801A88F8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185570; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185570); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80185580; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185580); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801855D0[])(void); + +void func_80157DC4(void *a0) { + D_801855D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801855D8[])(void); + +void func_80157FC4(void *a0) { + D_801855D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801855A4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801855A4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801855E4[])(void); + +void func_8015824C(void *a0) { + D_801855E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801855B4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801855B4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A8900; +extern s32 D_801A890C; +extern s32 D_801A8910; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A8900 = 0; + D_801A890C = 1; + D_801A8910 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A8900; +extern s32 D_801A890C; +extern s32 D_801A8910; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A8900 = 0; + D_801A890C = 1; + D_801A8910 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80185620[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80185620[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A8900; + +void func_80158BB0(void *arg0) { + if (D_801A8900 == 0) { + D_801A8900 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A890C; +extern s32 D_801855F4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A890C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801855F4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A8910; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A8910 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8900; +extern s32 D_801A8908; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A8900 == 4) { + D_801A8900 = 5; + } + if (D_801A8908 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018565C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018565C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_801594E8); + + +extern void (*D_80185870[])(void); + +void func_80159698(void *a0) { + D_80185870[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80185690)); + func_80028620(1, &(*(u8 *)&D_80185690) + 0x10); + func_80028620(2, &(*(u8 *)&D_80185690) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185914[])(void); + +void func_80159968(void *a0) { + D_80185914[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185A68[])(void); + +void func_80159B70(void *a0) { + D_80185A68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80185884; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80185884); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80185A70[])(void); + +void func_8015A264(void *a0) { + D_80185A70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80185894; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80185894); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_000/ov_SC04_000_jr_8015A3C8.c b/src/ov_SC04_000/ov_SC04_000_jr_8015A3C8.c new file mode 100644 index 000000000..edd769488 --- /dev/null +++ b/src/ov_SC04_000/ov_SC04_000_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801857BC; +extern u8 D_8018572C; +extern u8 D_80185708; +extern u8 D_801856E4; +extern u8 D_80185798; +extern u8 D_80185774; +extern u8 D_80185750; +extern u8 D_801856C0; +extern void func_80145934(void); +extern u8 D_8018584C; +extern u8 D_80185828; +extern u8 D_80185804; +extern u8 D_801857E0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184C44[]; +extern unsigned char D_80184C74[]; +extern unsigned char D_80184CC4[]; +extern unsigned char D_80184CF4[]; +extern unsigned char D_80184D24[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184D74[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184E3C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184EC4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184ECC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A88C0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A88C4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184EFC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184FA4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184FC8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184FB8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184FDC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184FE8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184FF8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80185010[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80185000; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80185024[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185040[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80185030; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80185054[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185068[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018507C; +extern void (*D_801850A4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80185084; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801850F0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801850F4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185558[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185568[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A88F8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185590[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185570; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185580; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801855D0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801855D8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801855A4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801855E4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801855B4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8900; +extern s32 D_801A890C; +extern s32 D_801A8910; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80185620[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801855F4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8908; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185870[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185690[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185914[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185A68[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80185884; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185A70[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80185894; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185920[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801858A4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185920[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801858A4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185920[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801858B4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801858B4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801858B4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80185A78[])(void); + +void func_8015AD3C(void *a0) { + D_80185A78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_002/ov_SC04_002_after.c b/src/ov_SC04_002/ov_SC04_002_after.c index 8679bd831..4c9b8c1d8 100644 --- a/src/ov_SC04_002/ov_SC04_002_after.c +++ b/src/ov_SC04_002/ov_SC04_002_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_002/nonmatchings/ov_SC04_002_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018A21C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018A21C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018A25C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018A25C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018A260[])(void); - -void func_80155580(void *a0) { - D_8018A260[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018A454[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018A454[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018A6C4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018A6C4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018A6C4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018A6D4[])(void); - -void func_80157544(void *a0) { - D_8018A6D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801BFC08; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801BFC08 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801BFC08 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018A6FC[])(void); -extern int D_801BFC08; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018A6FC[*(unsigned short *)((char *)param_1 + 2)](); - D_801BFC08 = D_801BFC08 - 1; - if (D_801BFC08 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018A6DC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018A6DC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018A6EC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018A6EC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018A73C[])(void); - -void func_80157DC4(void *a0) { - D_8018A73C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018A744[])(void); - -void func_80157FC4(void *a0) { - D_8018A744[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018A710; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018A710); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018A750[])(void); - -void func_8015824C(void *a0) { - D_8018A750[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018A720; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018A720); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801BFC10; -extern s32 D_801BFC1C; -extern s32 D_801BFC20; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801BFC10 = 0; - D_801BFC1C = 1; - D_801BFC20 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801BFC10; -extern s32 D_801BFC1C; -extern s32 D_801BFC20; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801BFC10 = 0; - D_801BFC1C = 1; - D_801BFC20 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018A78C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018A78C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801BFC10; - -void func_80158BB0(void *arg0) { - if (D_801BFC10 == 0) { - D_801BFC10 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801BFC1C; -extern s32 D_8018A760[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801BFC1C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018A760[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801BFC20; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801BFC20 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801BFC10; -extern s32 D_801BFC18; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801BFC10 == 4) { - D_801BFC10 = 5; - } - if (D_801BFC18 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018A7C8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018A7C8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_801594E8); - - -extern void (*D_8018A9DC[])(void); - -void func_80159698(void *a0) { - D_8018A9DC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018A7FC)); - func_80028620(1, &(*(u8 *)&D_8018A7FC) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018A7FC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018AA80[])(void); - -void func_80159968(void *a0) { - D_8018AA80[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018ABD4[])(void); - -void func_80159B70(void *a0) { - D_8018ABD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018A9F0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A9F0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018ABDC[])(void); - -void func_8015A264(void *a0) { - D_8018ABDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018AA00; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018AA00); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018AA8C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018AA10; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AA10); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018AA8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018AA20 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018AA20; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018AA20); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018ABE4[])(void); - -void func_8015AD3C(void *a0) { - D_8018ABE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8015444C.c b/src/ov_SC04_002/ov_SC04_002_jr_8015444C.c new file mode 100644 index 000000000..f5dc5c472 --- /dev/null +++ b/src/ov_SC04_002/ov_SC04_002_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A928; +extern u8 D_8018A898; +extern u8 D_8018A874; +extern u8 D_8018A850; +extern u8 D_8018A904; +extern u8 D_8018A8E0; +extern u8 D_8018A8BC; +extern u8 D_8018A82C; +extern void func_80145934(void); +extern u8 D_8018A9B8; +extern u8 D_8018A994; +extern u8 D_8018A970; +extern u8 D_8018A94C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189DB0[]; +extern unsigned char D_80189DE0[]; +extern unsigned char D_80189E30[]; +extern unsigned char D_80189E60[]; +extern unsigned char D_80189E90[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189EE0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189FA8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A030[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A038; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BFBD0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BFBD4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A068; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A110[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A134[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A124; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A148[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A154[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A164[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A17C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A16C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A190[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A1AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A19C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A1C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A1D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A1E8; +extern void (*D_8018A210[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A1F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018A21C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018A21C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018A25C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018A25C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018A260[])(void); + +void func_80155580(void *a0) { + D_8018A260[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018A454[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018A454[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018A6C4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A6C4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018A6C4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018A6D4[])(void); + +void func_80157544(void *a0) { + D_8018A6D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801BFC08; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801BFC08 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801BFC08 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018A6FC[])(void); +extern int D_801BFC08; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018A6FC[*(unsigned short *)((char *)param_1 + 2)](); + D_801BFC08 = D_801BFC08 - 1; + if (D_801BFC08 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A6DC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018A6DC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018A6EC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018A6EC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018A73C[])(void); + +void func_80157DC4(void *a0) { + D_8018A73C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018A744[])(void); + +void func_80157FC4(void *a0) { + D_8018A744[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018A710; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018A710); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018A750[])(void); + +void func_8015824C(void *a0) { + D_8018A750[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018A720; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018A720); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801BFC10; +extern s32 D_801BFC1C; +extern s32 D_801BFC20; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801BFC10 = 0; + D_801BFC1C = 1; + D_801BFC20 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801BFC10; +extern s32 D_801BFC1C; +extern s32 D_801BFC20; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801BFC10 = 0; + D_801BFC1C = 1; + D_801BFC20 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018A78C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018A78C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801BFC10; + +void func_80158BB0(void *arg0) { + if (D_801BFC10 == 0) { + D_801BFC10 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801BFC1C; +extern s32 D_8018A760[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801BFC1C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018A760[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801BFC20; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801BFC20 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801BFC10; +extern s32 D_801BFC18; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801BFC10 == 4) { + D_801BFC10 = 5; + } + if (D_801BFC18 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018A7C8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018A7C8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_801594E8); + + +extern void (*D_8018A9DC[])(void); + +void func_80159698(void *a0) { + D_8018A9DC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018A7FC)); + func_80028620(1, &(*(u8 *)&D_8018A7FC) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018A7FC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018AA80[])(void); + +void func_80159968(void *a0) { + D_8018AA80[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018ABD4[])(void); + +void func_80159B70(void *a0) { + D_8018ABD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018A9F0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A9F0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018ABDC[])(void); + +void func_8015A264(void *a0) { + D_8018ABDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018AA00; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018AA00); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_002/ov_SC04_002_jr_8015A3C8.c b/src/ov_SC04_002/ov_SC04_002_jr_8015A3C8.c new file mode 100644 index 000000000..a390024f8 --- /dev/null +++ b/src/ov_SC04_002/ov_SC04_002_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A928; +extern u8 D_8018A898; +extern u8 D_8018A874; +extern u8 D_8018A850; +extern u8 D_8018A904; +extern u8 D_8018A8E0; +extern u8 D_8018A8BC; +extern u8 D_8018A82C; +extern void func_80145934(void); +extern u8 D_8018A9B8; +extern u8 D_8018A994; +extern u8 D_8018A970; +extern u8 D_8018A94C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189DB0[]; +extern unsigned char D_80189DE0[]; +extern unsigned char D_80189E30[]; +extern unsigned char D_80189E60[]; +extern unsigned char D_80189E90[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189EE0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189FA8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A030[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A038; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BFBD0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BFBD4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A068; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A110[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A134[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A124; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A148[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A154[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A164[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A17C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A16C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A190[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A1AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A19C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A1C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A1D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A1E8; +extern void (*D_8018A210[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A1F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A25C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A260[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A6C4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018A6D4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BFC08; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018A6FC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A6DC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018A6EC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018A73C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018A744[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018A710; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018A750[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018A720; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BFC10; +extern s32 D_801BFC1C; +extern s32 D_801BFC20; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018A78C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018A760[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BFC18; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A9DC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018A7FC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018AA80[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018ABD4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A9F0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018ABDC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018AA00; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018AA8C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018AA10; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AA10); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018AA8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018AA20 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018AA20; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018AA20); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018ABE4[])(void); + +void func_8015AD3C(void *a0) { + D_8018ABE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_003/ov_SC04_003_after.c b/src/ov_SC04_003/ov_SC04_003_after.c index 12cc21ea0..49d95a4b0 100644 --- a/src/ov_SC04_003/ov_SC04_003_after.c +++ b/src/ov_SC04_003/ov_SC04_003_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_003/nonmatchings/ov_SC04_003_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183FB8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183FB8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183FF8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183FF8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183FFC[])(void); - -void func_80155580(void *a0) { - D_80183FFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801841F0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801841F0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184460 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184460[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184460[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184470[])(void); - -void func_80157544(void *a0) { - D_80184470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019A870; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019A870 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019A870 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184498[])(void); -extern int D_8019A870; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184498[*(unsigned short *)((char *)param_1 + 2)](); - D_8019A870 = D_8019A870 - 1; - if (D_8019A870 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184478; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184478); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184488; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184488); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801844D8[])(void); - -void func_80157DC4(void *a0) { - D_801844D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801844E0[])(void); - -void func_80157FC4(void *a0) { - D_801844E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801844AC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801844AC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801844EC[])(void); - -void func_8015824C(void *a0) { - D_801844EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801844BC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801844BC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019A878; -extern s32 D_8019A884; -extern s32 D_8019A888; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019A878 = 0; - D_8019A884 = 1; - D_8019A888 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019A878; -extern s32 D_8019A884; -extern s32 D_8019A888; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019A878 = 0; - D_8019A884 = 1; - D_8019A888 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184528[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184528[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019A878; - -void func_80158BB0(void *arg0) { - if (D_8019A878 == 0) { - D_8019A878 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019A884; -extern s32 D_801844FC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019A884; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801844FC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019A888; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019A888 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019A878; -extern s32 D_8019A880; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019A878 == 4) { - D_8019A878 = 5; - } - if (D_8019A880 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184564[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184564; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_801594E8); - - -extern void (*D_80184778[])(void); - -void func_80159698(void *a0) { - D_80184778[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184598)); - func_80028620(1, &(*(u8 *)&D_80184598) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184598) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018481C[])(void); - -void func_80159968(void *a0) { - D_8018481C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184970[])(void); - -void func_80159B70(void *a0) { - D_80184970[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018478C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018478C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184978[])(void); - -void func_8015A264(void *a0) { - D_80184978[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018479C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018479C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184828[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801847AC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184828[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801847AC); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184828[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801847BC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801847BC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801847BC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184980[])(void); - -void func_8015AD3C(void *a0) { - D_80184980[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8015444C.c b/src/ov_SC04_003/ov_SC04_003_jr_8015444C.c new file mode 100644 index 000000000..21e15304a --- /dev/null +++ b/src/ov_SC04_003/ov_SC04_003_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846C4; +extern u8 D_80184634; +extern u8 D_80184610; +extern u8 D_801845EC; +extern u8 D_801846A0; +extern u8 D_8018467C; +extern u8 D_80184658; +extern u8 D_801845C8; +extern void func_80145934(void); +extern u8 D_80184754; +extern u8 D_80184730; +extern u8 D_8018470C; +extern u8 D_801846E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B4C[]; +extern unsigned char D_80183B7C[]; +extern unsigned char D_80183BCC[]; +extern unsigned char D_80183BFC[]; +extern unsigned char D_80183C2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DCC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DD4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A83C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183E04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183ED0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183F00[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F18[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F08; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F2C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F48[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F38; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F5C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F70[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F84; +extern void (*D_80183FAC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F8C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183FB8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183FB8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183FF8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183FF8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183FFC[])(void); + +void func_80155580(void *a0) { + D_80183FFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801841F0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801841F0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184460 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184460[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184460[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184470[])(void); + +void func_80157544(void *a0) { + D_80184470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019A870; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019A870 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019A870 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184498[])(void); +extern int D_8019A870; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184498[*(unsigned short *)((char *)param_1 + 2)](); + D_8019A870 = D_8019A870 - 1; + if (D_8019A870 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184478; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184478); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184488; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184488); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801844D8[])(void); + +void func_80157DC4(void *a0) { + D_801844D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801844E0[])(void); + +void func_80157FC4(void *a0) { + D_801844E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801844AC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801844AC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801844EC[])(void); + +void func_8015824C(void *a0) { + D_801844EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801844BC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801844BC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019A878; +extern s32 D_8019A884; +extern s32 D_8019A888; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019A878 = 0; + D_8019A884 = 1; + D_8019A888 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019A878; +extern s32 D_8019A884; +extern s32 D_8019A888; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019A878 = 0; + D_8019A884 = 1; + D_8019A888 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184528[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184528[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019A878; + +void func_80158BB0(void *arg0) { + if (D_8019A878 == 0) { + D_8019A878 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019A884; +extern s32 D_801844FC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019A884; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801844FC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019A888; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019A888 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A878; +extern s32 D_8019A880; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019A878 == 4) { + D_8019A878 = 5; + } + if (D_8019A880 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184564[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184564; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_801594E8); + + +extern void (*D_80184778[])(void); + +void func_80159698(void *a0) { + D_80184778[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184598)); + func_80028620(1, &(*(u8 *)&D_80184598) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184598) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018481C[])(void); + +void func_80159968(void *a0) { + D_8018481C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184970[])(void); + +void func_80159B70(void *a0) { + D_80184970[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018478C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018478C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184978[])(void); + +void func_8015A264(void *a0) { + D_80184978[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018479C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018479C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_003/ov_SC04_003_jr_8015A3C8.c b/src/ov_SC04_003/ov_SC04_003_jr_8015A3C8.c new file mode 100644 index 000000000..51626989f --- /dev/null +++ b/src/ov_SC04_003/ov_SC04_003_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801846C4; +extern u8 D_80184634; +extern u8 D_80184610; +extern u8 D_801845EC; +extern u8 D_801846A0; +extern u8 D_8018467C; +extern u8 D_80184658; +extern u8 D_801845C8; +extern void func_80145934(void); +extern u8 D_80184754; +extern u8 D_80184730; +extern u8 D_8018470C; +extern u8 D_801846E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183B4C[]; +extern unsigned char D_80183B7C[]; +extern unsigned char D_80183BCC[]; +extern unsigned char D_80183BFC[]; +extern unsigned char D_80183C2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183C7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183D44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183DCC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183DD4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A838; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A83C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183E04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183EAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183ED0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183EC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183EE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183EF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183F00[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183F18[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183F08; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183F2C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183F48[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183F38; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183F5C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183F70[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183F84; +extern void (*D_80183FAC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183F8C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183FF8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183FFC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184460[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184470[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019A870; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184498[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184478; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184488; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801844D8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801844E0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801844AC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801844EC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801844BC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019A878; +extern s32 D_8019A884; +extern s32 D_8019A888; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184528[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801844FC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A880; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184778[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184598[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018481C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184970[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018478C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184978[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018479C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184828[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801847AC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184828[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801847AC); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184828[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801847BC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801847BC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801847BC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184980[])(void); + +void func_8015AD3C(void *a0) { + D_80184980[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_004/ov_SC04_004_after.c b/src/ov_SC04_004/ov_SC04_004_after.c index 01253ac9e..baf9dc2d5 100644 --- a/src/ov_SC04_004/ov_SC04_004_after.c +++ b/src/ov_SC04_004/ov_SC04_004_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_004/nonmatchings/ov_SC04_004_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801864EC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801864EC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018652C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018652C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186530[])(void); - -void func_80155580(void *a0) { - D_80186530[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186724[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186724[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186994 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186994[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186994[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801869A4[])(void); - -void func_80157544(void *a0) { - D_801869A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B2670; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B2670 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B2670 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801869CC[])(void); -extern int D_801B2670; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801869CC[*(unsigned short *)((char *)param_1 + 2)](); - D_801B2670 = D_801B2670 - 1; - if (D_801B2670 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801869AC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801869AC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801869BC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801869BC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186A0C[])(void); - -void func_80157DC4(void *a0) { - D_80186A0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186A14[])(void); - -void func_80157FC4(void *a0) { - D_80186A14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801869E0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801869E0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186A20[])(void); - -void func_8015824C(void *a0) { - D_80186A20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801869F0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801869F0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B2678; -extern s32 D_801B2684; -extern s32 D_801B2688; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B2678 = 0; - D_801B2684 = 1; - D_801B2688 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B2678; -extern s32 D_801B2684; -extern s32 D_801B2688; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B2678 = 0; - D_801B2684 = 1; - D_801B2688 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80186A5C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80186A5C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B2678; - -void func_80158BB0(void *arg0) { - if (D_801B2678 == 0) { - D_801B2678 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B2684; -extern s32 D_80186A30[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B2684; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186A30[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B2688; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B2688 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B2678; -extern s32 D_801B2680; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B2678 == 4) { - D_801B2678 = 5; - } - if (D_801B2680 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186A98[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186A98; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_801594E8); - - -extern void (*D_80186CAC[])(void); - -void func_80159698(void *a0) { - D_80186CAC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186ACC)); - func_80028620(1, &(*(u8 *)&D_80186ACC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186ACC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186D50[])(void); - -void func_80159968(void *a0) { - D_80186D50[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186EA4[])(void); - -void func_80159B70(void *a0) { - D_80186EA4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186CC0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186CC0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80186EAC[])(void); - -void func_8015A264(void *a0) { - D_80186EAC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186CD0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186CD0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186D5C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_80186CE0[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186D5C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186CE0)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186D5C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186CF0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186CF0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186CF0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186EB4[])(void); - -void func_8015AD3C(void *a0) { - D_80186EB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8015444C.c b/src/ov_SC04_004/ov_SC04_004_jr_8015444C.c new file mode 100644 index 000000000..645a47325 --- /dev/null +++ b/src/ov_SC04_004/ov_SC04_004_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186BF8; +extern u8 D_80186B68; +extern u8 D_80186B44; +extern u8 D_80186B20; +extern u8 D_80186BD4; +extern u8 D_80186BB0; +extern u8 D_80186B8C; +extern u8 D_80186AFC; +extern void func_80145934(void); +extern u8 D_80186C88; +extern u8 D_80186C64; +extern u8 D_80186C40; +extern u8 D_80186C1C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186080[]; +extern unsigned char D_801860B0[]; +extern unsigned char D_80186100[]; +extern unsigned char D_80186130[]; +extern unsigned char D_80186160[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801861B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186278[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186300[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186308; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2638; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B263C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186338; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801863E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186404[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801863F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186418[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186424[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186434[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018644C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018643C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186460[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018647C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018646C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186490[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801864A4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801864B8; +extern void (*D_801864E0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801864C0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801864EC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801864EC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018652C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018652C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186530[])(void); + +void func_80155580(void *a0) { + D_80186530[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186724[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186724[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186994 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186994[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186994[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801869A4[])(void); + +void func_80157544(void *a0) { + D_801869A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B2670; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B2670 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B2670 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801869CC[])(void); +extern int D_801B2670; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801869CC[*(unsigned short *)((char *)param_1 + 2)](); + D_801B2670 = D_801B2670 - 1; + if (D_801B2670 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801869AC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801869AC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801869BC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801869BC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186A0C[])(void); + +void func_80157DC4(void *a0) { + D_80186A0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186A14[])(void); + +void func_80157FC4(void *a0) { + D_80186A14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801869E0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801869E0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186A20[])(void); + +void func_8015824C(void *a0) { + D_80186A20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801869F0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801869F0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B2678; +extern s32 D_801B2684; +extern s32 D_801B2688; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B2678 = 0; + D_801B2684 = 1; + D_801B2688 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B2678; +extern s32 D_801B2684; +extern s32 D_801B2688; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B2678 = 0; + D_801B2684 = 1; + D_801B2688 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80186A5C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80186A5C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B2678; + +void func_80158BB0(void *arg0) { + if (D_801B2678 == 0) { + D_801B2678 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B2684; +extern s32 D_80186A30[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B2684; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80186A30[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B2688; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B2688 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2678; +extern s32 D_801B2680; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B2678 == 4) { + D_801B2678 = 5; + } + if (D_801B2680 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186A98[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186A98; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_801594E8); + + +extern void (*D_80186CAC[])(void); + +void func_80159698(void *a0) { + D_80186CAC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186ACC)); + func_80028620(1, &(*(u8 *)&D_80186ACC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186ACC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186D50[])(void); + +void func_80159968(void *a0) { + D_80186D50[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186EA4[])(void); + +void func_80159B70(void *a0) { + D_80186EA4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186CC0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186CC0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80186EAC[])(void); + +void func_8015A264(void *a0) { + D_80186EAC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186CD0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186CD0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_004/ov_SC04_004_jr_8015A3C8.c b/src/ov_SC04_004/ov_SC04_004_jr_8015A3C8.c new file mode 100644 index 000000000..37de73633 --- /dev/null +++ b/src/ov_SC04_004/ov_SC04_004_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186BF8; +extern u8 D_80186B68; +extern u8 D_80186B44; +extern u8 D_80186B20; +extern u8 D_80186BD4; +extern u8 D_80186BB0; +extern u8 D_80186B8C; +extern u8 D_80186AFC; +extern void func_80145934(void); +extern u8 D_80186C88; +extern u8 D_80186C64; +extern u8 D_80186C40; +extern u8 D_80186C1C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186080[]; +extern unsigned char D_801860B0[]; +extern unsigned char D_80186100[]; +extern unsigned char D_80186130[]; +extern unsigned char D_80186160[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801861B0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186278[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186300[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186308; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B2638; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B263C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186338; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801863E0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186404[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801863F4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186418[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186424[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186434[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018644C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018643C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186460[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018647C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018646C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186490[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801864A4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801864B8; +extern void (*D_801864E0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801864C0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018652C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186530[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186994[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801869A4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B2670; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801869CC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801869AC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801869BC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186A0C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186A14[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801869E0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186A20[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801869F0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B2678; +extern s32 D_801B2684; +extern s32 D_801B2688; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80186A5C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80186A30[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B2680; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186CAC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186ACC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186D50[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186EA4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186CC0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186EAC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186CD0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186D5C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80186CE0[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186D5C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186CE0)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186D5C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186CF0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186CF0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186CF0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186EB4[])(void); + +void func_8015AD3C(void *a0) { + D_80186EB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_005/ov_SC04_005_after.c b/src/ov_SC04_005/ov_SC04_005_after.c index b82c2f1ae..450380087 100644 --- a/src/ov_SC04_005/ov_SC04_005_after.c +++ b/src/ov_SC04_005/ov_SC04_005_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_005/nonmatchings/ov_SC04_005_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80189920[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80189920[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80189960[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80189960[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80189964[])(void); - -void func_80155580(void *a0) { - D_80189964[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80189B58[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80189B58[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189DC8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80189DC8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80189DC8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80189DD8[])(void); - -void func_80157544(void *a0) { - D_80189DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C0848; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C0848 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C0848 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80189E00[])(void); -extern int D_801C0848; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80189E00[*(unsigned short *)((char *)param_1 + 2)](); - D_801C0848 = D_801C0848 - 1; - if (D_801C0848 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80189DE0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189DE0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80189DF0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189DF0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80189E40[])(void); - -void func_80157DC4(void *a0) { - D_80189E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80189E48[])(void); - -void func_80157FC4(void *a0) { - D_80189E48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80189E14; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80189E14); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80189E54[])(void); - -void func_8015824C(void *a0) { - D_80189E54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80189E24; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189E24); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C0850; -extern s32 D_801C085C; -extern s32 D_801C0860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C0850 = 0; - D_801C085C = 1; - D_801C0860 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C0850; -extern s32 D_801C085C; -extern s32 D_801C0860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C0850 = 0; - D_801C085C = 1; - D_801C0860 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80189E90[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80189E90[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C0850; - -void func_80158BB0(void *arg0) { - if (D_801C0850 == 0) { - D_801C0850 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C085C; -extern s32 D_80189E64[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C085C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189E64[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C0860; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C0860 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C0850; -extern s32 D_801C0858; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C0850 == 4) { - D_801C0850 = 5; - } - if (D_801C0858 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80189ECC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80189ECC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_801594E8); - - -extern void (*D_8018A0E0[])(void); - -void func_80159698(void *a0) { - D_8018A0E0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80189F00)); - func_80028620(1, &(*(u8 *)&D_80189F00) + 0x10); - func_80028620(2, &(*(u8 *)&D_80189F00) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018A184[])(void); - -void func_80159968(void *a0) { - D_8018A184[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018A2D8[])(void); - -void func_80159B70(void *a0) { - D_8018A2D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018A0F4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A0F4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018A2E0[])(void); - -void func_8015A264(void *a0) { - D_8018A2E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018A104; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018A104); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018A190[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018A114; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018A190[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A114)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018A190[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018A124 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018A124; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018A124); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018A2E8[])(void); - -void func_8015AD3C(void *a0) { - D_8018A2E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8015444C.c b/src/ov_SC04_005/ov_SC04_005_jr_8015444C.c new file mode 100644 index 000000000..c65df0dac --- /dev/null +++ b/src/ov_SC04_005/ov_SC04_005_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A02C; +extern u8 D_80189F9C; +extern u8 D_80189F78; +extern u8 D_80189F54; +extern u8 D_8018A008; +extern u8 D_80189FE4; +extern u8 D_80189FC0; +extern u8 D_80189F30; +extern void func_80145934(void); +extern u8 D_8018A0BC; +extern u8 D_8018A098; +extern u8 D_8018A074; +extern u8 D_8018A050; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801894B4[]; +extern unsigned char D_801894E4[]; +extern unsigned char D_80189534[]; +extern unsigned char D_80189564[]; +extern unsigned char D_80189594[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801895E4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801896AC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189734[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018973C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C0814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018976C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189814[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189838[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189828; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018984C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189858[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189868[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189880[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189870; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189894[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801898B0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801898A0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801898C4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801898D8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801898EC; +extern void (*D_80189914[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801898F4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80189920[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80189920[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80189960[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80189960[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80189964[])(void); + +void func_80155580(void *a0) { + D_80189964[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80189B58[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80189B58[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80189DC8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80189DC8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80189DC8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80189DD8[])(void); + +void func_80157544(void *a0) { + D_80189DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C0848; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C0848 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C0848 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80189E00[])(void); +extern int D_801C0848; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80189E00[*(unsigned short *)((char *)param_1 + 2)](); + D_801C0848 = D_801C0848 - 1; + if (D_801C0848 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189DE0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80189DE0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80189DF0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80189DF0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80189E40[])(void); + +void func_80157DC4(void *a0) { + D_80189E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80189E48[])(void); + +void func_80157FC4(void *a0) { + D_80189E48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80189E14; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80189E14); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80189E54[])(void); + +void func_8015824C(void *a0) { + D_80189E54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80189E24; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80189E24); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C0850; +extern s32 D_801C085C; +extern s32 D_801C0860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C0850 = 0; + D_801C085C = 1; + D_801C0860 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C0850; +extern s32 D_801C085C; +extern s32 D_801C0860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C0850 = 0; + D_801C085C = 1; + D_801C0860 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80189E90[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80189E90[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C0850; + +void func_80158BB0(void *arg0) { + if (D_801C0850 == 0) { + D_801C0850 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C085C; +extern s32 D_80189E64[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C085C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80189E64[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C0860; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C0860 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0850; +extern s32 D_801C0858; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C0850 == 4) { + D_801C0850 = 5; + } + if (D_801C0858 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80189ECC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80189ECC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_801594E8); + + +extern void (*D_8018A0E0[])(void); + +void func_80159698(void *a0) { + D_8018A0E0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80189F00)); + func_80028620(1, &(*(u8 *)&D_80189F00) + 0x10); + func_80028620(2, &(*(u8 *)&D_80189F00) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018A184[])(void); + +void func_80159968(void *a0) { + D_8018A184[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018A2D8[])(void); + +void func_80159B70(void *a0) { + D_8018A2D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018A0F4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A0F4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018A2E0[])(void); + +void func_8015A264(void *a0) { + D_8018A2E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018A104; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018A104); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_005/ov_SC04_005_jr_8015A3C8.c b/src/ov_SC04_005/ov_SC04_005_jr_8015A3C8.c new file mode 100644 index 000000000..0d51b2320 --- /dev/null +++ b/src/ov_SC04_005/ov_SC04_005_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A02C; +extern u8 D_80189F9C; +extern u8 D_80189F78; +extern u8 D_80189F54; +extern u8 D_8018A008; +extern u8 D_80189FE4; +extern u8 D_80189FC0; +extern u8 D_80189F30; +extern void func_80145934(void); +extern u8 D_8018A0BC; +extern u8 D_8018A098; +extern u8 D_8018A074; +extern u8 D_8018A050; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801894B4[]; +extern unsigned char D_801894E4[]; +extern unsigned char D_80189534[]; +extern unsigned char D_80189564[]; +extern unsigned char D_80189594[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801895E4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801896AC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189734[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018973C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C0810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C0814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018976C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189814[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189838[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189828; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018984C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189858[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189868[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80189880[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80189870; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80189894[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801898B0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801898A0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801898C4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801898D8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801898EC; +extern void (*D_80189914[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801898F4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80189960[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80189964[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80189DC8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80189DD8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C0848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80189E00[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80189DE0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80189DF0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80189E40[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80189E48[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80189E14; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80189E54[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80189E24; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C0850; +extern s32 D_801C085C; +extern s32 D_801C0860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80189E90[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80189E64[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C0858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A0E0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80189F00[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018A184[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018A2D8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A0F4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018A2E0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018A104; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018A190[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018A114; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018A190[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A114)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018A190[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018A124 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018A124; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018A124); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018A2E8[])(void); + +void func_8015AD3C(void *a0) { + D_8018A2E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_006/ov_SC04_006_after.c b/src/ov_SC04_006/ov_SC04_006_after.c index 75edb7f3b..177f7f8ee 100644 --- a/src/ov_SC04_006/ov_SC04_006_after.c +++ b/src/ov_SC04_006/ov_SC04_006_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_006/nonmatchings/ov_SC04_006_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80181A00[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80181A00[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181A40[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181A40[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181A44[])(void); - -void func_80155580(void *a0) { - D_80181A44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181C38[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181C38[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181EA8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80181EA8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80181EA8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80181EB8[])(void); - -void func_80157544(void *a0) { - D_80181EB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019CAF0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019CAF0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019CAF0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181EE0[])(void); -extern int D_8019CAF0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181EE0[*(unsigned short *)((char *)param_1 + 2)](); - D_8019CAF0 = D_8019CAF0 - 1; - if (D_8019CAF0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181EC0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181EC0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181ED0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181ED0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80181F20[])(void); - -void func_80157DC4(void *a0) { - D_80181F20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80181F28[])(void); - -void func_80157FC4(void *a0) { - D_80181F28[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181EF4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181EF4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80181F34[])(void); - -void func_8015824C(void *a0) { - D_80181F34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80181F04; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181F04); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019CAF8; -extern s32 D_8019CB04; -extern s32 D_8019CB08; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019CAF8 = 0; - D_8019CB04 = 1; - D_8019CB08 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019CAF8; -extern s32 D_8019CB04; -extern s32 D_8019CB08; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019CAF8 = 0; - D_8019CB04 = 1; - D_8019CB08 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181F70[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181F70[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019CAF8; - -void func_80158BB0(void *arg0) { - if (D_8019CAF8 == 0) { - D_8019CAF8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019CB04; -extern s32 D_80181F44[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019CB04; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181F44[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019CB08; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019CB08 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019CAF8; -extern s32 D_8019CB00; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019CAF8 == 4) { - D_8019CAF8 = 5; - } - if (D_8019CB00 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181FAC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181FAC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_801594E8); - - -extern void (*D_801821C0[])(void); - -void func_80159698(void *a0) { - D_801821C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181FE0)); - func_80028620(1, &(*(u8 *)&D_80181FE0) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181FE0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80182264[])(void); - -void func_80159968(void *a0) { - D_80182264[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801823B8[])(void); - -void func_80159B70(void *a0) { - D_801823B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801821D4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801821D4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801823C0[])(void); - -void func_8015A264(void *a0) { - D_801823C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801821E4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801821E4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182270[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_801821F4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182270[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801821F4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182270[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182204 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182204; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182204); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801823C8[])(void); - -void func_8015AD3C(void *a0) { - D_801823C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8015444C.c b/src/ov_SC04_006/ov_SC04_006_jr_8015444C.c new file mode 100644 index 000000000..708ce115d --- /dev/null +++ b/src/ov_SC04_006/ov_SC04_006_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018210C; +extern u8 D_8018207C; +extern u8 D_80182058; +extern u8 D_80182034; +extern u8 D_801820E8; +extern u8 D_801820C4; +extern u8 D_801820A0; +extern u8 D_80182010; +extern void func_80145934(void); +extern u8 D_8018219C; +extern u8 D_80182178; +extern u8 D_80182154; +extern u8 D_80182130; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181594[]; +extern unsigned char D_801815C4[]; +extern unsigned char D_80181614[]; +extern unsigned char D_80181644[]; +extern unsigned char D_80181674[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801816C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018178C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181814[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018181C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CAB8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CABC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018184C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801818F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181918[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181908; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018192C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181938[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181948[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181960[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181950; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181974[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181990[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181980; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801819A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801819B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801819CC; +extern void (*D_801819F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801819D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80181A00[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80181A00[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181A40[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181A40[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181A44[])(void); + +void func_80155580(void *a0) { + D_80181A44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181C38[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181C38[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181EA8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80181EA8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80181EA8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80181EB8[])(void); + +void func_80157544(void *a0) { + D_80181EB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019CAF0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019CAF0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019CAF0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181EE0[])(void); +extern int D_8019CAF0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181EE0[*(unsigned short *)((char *)param_1 + 2)](); + D_8019CAF0 = D_8019CAF0 - 1; + if (D_8019CAF0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181EC0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181EC0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181ED0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181ED0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80181F20[])(void); + +void func_80157DC4(void *a0) { + D_80181F20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80181F28[])(void); + +void func_80157FC4(void *a0) { + D_80181F28[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181EF4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181EF4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80181F34[])(void); + +void func_8015824C(void *a0) { + D_80181F34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80181F04; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181F04); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019CAF8; +extern s32 D_8019CB04; +extern s32 D_8019CB08; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019CAF8 = 0; + D_8019CB04 = 1; + D_8019CB08 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019CAF8; +extern s32 D_8019CB04; +extern s32 D_8019CB08; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019CAF8 = 0; + D_8019CB04 = 1; + D_8019CB08 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181F70[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181F70[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019CAF8; + +void func_80158BB0(void *arg0) { + if (D_8019CAF8 == 0) { + D_8019CAF8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019CB04; +extern s32 D_80181F44[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019CB04; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80181F44[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019CB08; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019CB08 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CAF8; +extern s32 D_8019CB00; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019CAF8 == 4) { + D_8019CAF8 = 5; + } + if (D_8019CB00 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181FAC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181FAC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_801594E8); + + +extern void (*D_801821C0[])(void); + +void func_80159698(void *a0) { + D_801821C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181FE0)); + func_80028620(1, &(*(u8 *)&D_80181FE0) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181FE0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80182264[])(void); + +void func_80159968(void *a0) { + D_80182264[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801823B8[])(void); + +void func_80159B70(void *a0) { + D_801823B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801821D4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801821D4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801823C0[])(void); + +void func_8015A264(void *a0) { + D_801823C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801821E4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801821E4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_006/ov_SC04_006_jr_8015A3C8.c b/src/ov_SC04_006/ov_SC04_006_jr_8015A3C8.c new file mode 100644 index 000000000..5fe6b180a --- /dev/null +++ b/src/ov_SC04_006/ov_SC04_006_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018210C; +extern u8 D_8018207C; +extern u8 D_80182058; +extern u8 D_80182034; +extern u8 D_801820E8; +extern u8 D_801820C4; +extern u8 D_801820A0; +extern u8 D_80182010; +extern void func_80145934(void); +extern u8 D_8018219C; +extern u8 D_80182178; +extern u8 D_80182154; +extern u8 D_80182130; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181594[]; +extern unsigned char D_801815C4[]; +extern unsigned char D_80181614[]; +extern unsigned char D_80181644[]; +extern unsigned char D_80181674[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801816C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018178C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181814[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018181C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019CAB8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019CABC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018184C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801818F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181918[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181908; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018192C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181938[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181948[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181960[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181950; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181974[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181990[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181980; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801819A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801819B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801819CC; +extern void (*D_801819F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801819D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181A40[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181A44[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181EA8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181EB8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019CAF0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181EE0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181EC0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181ED0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80181F20[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80181F28[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181EF4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80181F34[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181F04; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019CAF8; +extern s32 D_8019CB04; +extern s32 D_8019CB08; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181F70[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80181F44[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019CB00; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801821C0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181FE0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182264[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801823B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801821D4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801823C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801821E4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182270[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_801821F4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182270[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801821F4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182270[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182204 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182204; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182204); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801823C8[])(void); + +void func_8015AD3C(void *a0) { + D_801823C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_007/ov_SC04_007_after.c b/src/ov_SC04_007/ov_SC04_007_after.c index 631add2b7..b30d43cac 100644 --- a/src/ov_SC04_007/ov_SC04_007_after.c +++ b/src/ov_SC04_007/ov_SC04_007_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_007/nonmatchings/ov_SC04_007_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801879B8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801879B8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801879F8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801879F8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801879FC[])(void); - -void func_80155580(void *a0) { - D_801879FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187BF0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187BF0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187E60 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80187E60[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80187E60[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187E70[])(void); - -void func_80157544(void *a0) { - D_80187E70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B40A8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B40A8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B40A8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187E98[])(void); -extern int D_801B40A8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187E98[*(unsigned short *)((char *)param_1 + 2)](); - D_801B40A8 = D_801B40A8 - 1; - if (D_801B40A8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187E78; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187E78); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187E88; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187E88); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187ED8[])(void); - -void func_80157DC4(void *a0) { - D_80187ED8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187EE0[])(void); - -void func_80157FC4(void *a0) { - D_80187EE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187EAC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187EAC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187EEC[])(void); - -void func_8015824C(void *a0) { - D_80187EEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187EBC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187EBC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B40B0; -extern s32 D_801B40BC; -extern s32 D_801B40C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B40B0 = 0; - D_801B40BC = 1; - D_801B40C0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B40B0; -extern s32 D_801B40BC; -extern s32 D_801B40C0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B40B0 = 0; - D_801B40BC = 1; - D_801B40C0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187F28[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187F28[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B40B0; - -void func_80158BB0(void *arg0) { - if (D_801B40B0 == 0) { - D_801B40B0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B40BC; -extern s32 D_80187EFC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B40BC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187EFC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B40C0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B40C0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B40B0; -extern s32 D_801B40B8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B40B0 == 4) { - D_801B40B0 = 5; - } - if (D_801B40B8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187F64[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187F64; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_801594E8); - - -extern void (*D_80188178[])(void); - -void func_80159698(void *a0) { - D_80188178[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187F98)); - func_80028620(1, &(*(u8 *)&D_80187F98) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187F98) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018821C[])(void); - -void func_80159968(void *a0) { - D_8018821C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80188370[])(void); - -void func_80159B70(void *a0) { - D_80188370[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018818C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018818C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188378[])(void); - -void func_8015A264(void *a0) { - D_80188378[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018819C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018819C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188228[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_801881AC[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188228[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801881AC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188228[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801881BC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801881BC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801881BC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188380[])(void); - -void func_8015AD3C(void *a0) { - D_80188380[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8015444C.c b/src/ov_SC04_007/ov_SC04_007_jr_8015444C.c new file mode 100644 index 000000000..6258b7ea0 --- /dev/null +++ b/src/ov_SC04_007/ov_SC04_007_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801880C4; +extern u8 D_80188034; +extern u8 D_80188010; +extern u8 D_80187FEC; +extern u8 D_801880A0; +extern u8 D_8018807C; +extern u8 D_80188058; +extern u8 D_80187FC8; +extern void func_80145934(void); +extern u8 D_80188154; +extern u8 D_80188130; +extern u8 D_8018810C; +extern u8 D_801880E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018754C[]; +extern unsigned char D_8018757C[]; +extern unsigned char D_801875CC[]; +extern unsigned char D_801875FC[]; +extern unsigned char D_8018762C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018767C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187744[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801877CC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801877D4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4070; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4074; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187804; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801878AC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801878D0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801878C0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801878E4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801878F0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187900[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187918[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187908; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018792C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187948[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187938; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018795C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187970[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187984; +extern void (*D_801879AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018798C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801879B8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801879B8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801879F8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801879F8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801879FC[])(void); + +void func_80155580(void *a0) { + D_801879FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187BF0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187BF0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187E60 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80187E60[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80187E60[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187E70[])(void); + +void func_80157544(void *a0) { + D_80187E70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B40A8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B40A8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B40A8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187E98[])(void); +extern int D_801B40A8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187E98[*(unsigned short *)((char *)param_1 + 2)](); + D_801B40A8 = D_801B40A8 - 1; + if (D_801B40A8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187E78; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187E78); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187E88; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187E88); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187ED8[])(void); + +void func_80157DC4(void *a0) { + D_80187ED8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187EE0[])(void); + +void func_80157FC4(void *a0) { + D_80187EE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187EAC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187EAC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187EEC[])(void); + +void func_8015824C(void *a0) { + D_80187EEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187EBC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187EBC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B40B0; +extern s32 D_801B40BC; +extern s32 D_801B40C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B40B0 = 0; + D_801B40BC = 1; + D_801B40C0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B40B0; +extern s32 D_801B40BC; +extern s32 D_801B40C0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B40B0 = 0; + D_801B40BC = 1; + D_801B40C0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187F28[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187F28[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B40B0; + +void func_80158BB0(void *arg0) { + if (D_801B40B0 == 0) { + D_801B40B0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B40BC; +extern s32 D_80187EFC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B40BC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187EFC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B40C0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B40C0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B40B0; +extern s32 D_801B40B8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B40B0 == 4) { + D_801B40B0 = 5; + } + if (D_801B40B8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187F64[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187F64; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_801594E8); + + +extern void (*D_80188178[])(void); + +void func_80159698(void *a0) { + D_80188178[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187F98)); + func_80028620(1, &(*(u8 *)&D_80187F98) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187F98) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018821C[])(void); + +void func_80159968(void *a0) { + D_8018821C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80188370[])(void); + +void func_80159B70(void *a0) { + D_80188370[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018818C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018818C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188378[])(void); + +void func_8015A264(void *a0) { + D_80188378[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018819C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018819C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_007/ov_SC04_007_jr_8015A3C8.c b/src/ov_SC04_007/ov_SC04_007_jr_8015A3C8.c new file mode 100644 index 000000000..fbcd078a9 --- /dev/null +++ b/src/ov_SC04_007/ov_SC04_007_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801880C4; +extern u8 D_80188034; +extern u8 D_80188010; +extern u8 D_80187FEC; +extern u8 D_801880A0; +extern u8 D_8018807C; +extern u8 D_80188058; +extern u8 D_80187FC8; +extern void func_80145934(void); +extern u8 D_80188154; +extern u8 D_80188130; +extern u8 D_8018810C; +extern u8 D_801880E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018754C[]; +extern unsigned char D_8018757C[]; +extern unsigned char D_801875CC[]; +extern unsigned char D_801875FC[]; +extern unsigned char D_8018762C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018767C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187744[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801877CC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801877D4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4070; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4074; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80187804; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801878AC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801878D0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801878C0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801878E4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801878F0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187900[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80187918[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187908; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018792C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187948[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187938; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018795C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80187970[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187984; +extern void (*D_801879AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018798C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801879F8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801879FC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187E60[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187E70[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B40A8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187E98[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187E78; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187E88; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187ED8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187EE0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187EAC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187EEC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187EBC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B40B0; +extern s32 D_801B40BC; +extern s32 D_801B40C0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187F28[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187EFC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B40B8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188178[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187F98[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018821C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188370[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018818C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188378[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018819C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188228[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_801881AC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188228[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801881AC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188228[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801881BC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801881BC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801881BC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188380[])(void); + +void func_8015AD3C(void *a0) { + D_80188380[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_008/ov_SC04_008_after.c b/src/ov_SC04_008/ov_SC04_008_after.c index f7a6fa1a4..9bab791ff 100644 --- a/src/ov_SC04_008/ov_SC04_008_after.c +++ b/src/ov_SC04_008/ov_SC04_008_after.c @@ -2617,7 +2617,310 @@ DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ -INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_after", func_8015444C); +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_after", func_801549F8); diff --git a/src/ov_SC04_009/ov_SC04_009_after.c b/src/ov_SC04_009/ov_SC04_009_after.c index f69dd206a..08241f46b 100644 --- a/src/ov_SC04_009/ov_SC04_009_after.c +++ b/src/ov_SC04_009/ov_SC04_009_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_009/nonmatchings/ov_SC04_009_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018091C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018091C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018095C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018095C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180960[])(void); - -void func_80155580(void *a0) { - D_80180960[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180B54[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180B54[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180DC4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180DC4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180DC4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180DD4[])(void); - -void func_80157544(void *a0) { - D_80180DD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80196F90; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80196F90 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80196F90 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180DFC[])(void); -extern int D_80196F90; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180DFC[*(unsigned short *)((char *)param_1 + 2)](); - D_80196F90 = D_80196F90 - 1; - if (D_80196F90 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180DDC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180DDC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180DEC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180DEC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180E3C[])(void); - -void func_80157DC4(void *a0) { - D_80180E3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180E44[])(void); - -void func_80157FC4(void *a0) { - D_80180E44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180E10; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180E10); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180E50[])(void); - -void func_8015824C(void *a0) { - D_80180E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180E20; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180E20); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80196F98; -extern s32 D_80196FA4; -extern s32 D_80196FA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80196F98 = 0; - D_80196FA4 = 1; - D_80196FA8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80196F98; -extern s32 D_80196FA4; -extern s32 D_80196FA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80196F98 = 0; - D_80196FA4 = 1; - D_80196FA8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180E8C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180E8C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80196F98; - -void func_80158BB0(void *arg0) { - if (D_80196F98 == 0) { - D_80196F98 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80196FA4; -extern s32 D_80180E60[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80196FA4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180E60[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80196FA8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80196FA8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80196F98; -extern s32 D_80196FA0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80196F98 == 4) { - D_80196F98 = 5; - } - if (D_80196FA0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180EC8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180EC8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_801594E8); - - -extern void (*D_801810DC[])(void); - -void func_80159698(void *a0) { - D_801810DC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180EFC)); - func_80028620(1, &(*(u8 *)&D_80180EFC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180EFC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181180[])(void); - -void func_80159968(void *a0) { - D_80181180[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801812D4[])(void); - -void func_80159B70(void *a0) { - D_801812D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801810F0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801810F0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801812DC[])(void); - -void func_8015A264(void *a0) { - D_801812DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181100; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181100); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018118C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_80181110[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018118C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181110)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018118C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181120 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181120; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181120); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801812E4[])(void); - -void func_8015AD3C(void *a0) { - D_801812E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8015444C.c b/src/ov_SC04_009/ov_SC04_009_jr_8015444C.c new file mode 100644 index 000000000..e6a0aa828 --- /dev/null +++ b/src/ov_SC04_009/ov_SC04_009_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181028; +extern u8 D_80180F98; +extern u8 D_80180F74; +extern u8 D_80180F50; +extern u8 D_80181004; +extern u8 D_80180FE0; +extern u8 D_80180FBC; +extern u8 D_80180F2C; +extern void func_80145934(void); +extern u8 D_801810B8; +extern u8 D_80181094; +extern u8 D_80181070; +extern u8 D_8018104C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern unsigned char D_80180530[]; +extern unsigned char D_80180560[]; +extern unsigned char D_80180590[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801805E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801806A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180730[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180738; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80196F58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80196F5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180768; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180810[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180834[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180824; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180848[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180854[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180864[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018087C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018086C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180890[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801808AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018089C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801808C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801808D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801808E8; +extern void (*D_80180910[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801808F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018091C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018091C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018095C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018095C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180960[])(void); + +void func_80155580(void *a0) { + D_80180960[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180B54[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180B54[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180DC4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180DC4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180DC4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180DD4[])(void); + +void func_80157544(void *a0) { + D_80180DD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80196F90; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80196F90 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80196F90 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180DFC[])(void); +extern int D_80196F90; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180DFC[*(unsigned short *)((char *)param_1 + 2)](); + D_80196F90 = D_80196F90 - 1; + if (D_80196F90 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180DDC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180DDC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180DEC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180DEC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180E3C[])(void); + +void func_80157DC4(void *a0) { + D_80180E3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180E44[])(void); + +void func_80157FC4(void *a0) { + D_80180E44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180E10; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180E10); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180E50[])(void); + +void func_8015824C(void *a0) { + D_80180E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180E20; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180E20); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80196F98; +extern s32 D_80196FA4; +extern s32 D_80196FA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80196F98 = 0; + D_80196FA4 = 1; + D_80196FA8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80196F98; +extern s32 D_80196FA4; +extern s32 D_80196FA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80196F98 = 0; + D_80196FA4 = 1; + D_80196FA8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180E8C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180E8C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80196F98; + +void func_80158BB0(void *arg0) { + if (D_80196F98 == 0) { + D_80196F98 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80196FA4; +extern s32 D_80180E60[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80196FA4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180E60[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80196FA8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80196FA8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80196F98; +extern s32 D_80196FA0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80196F98 == 4) { + D_80196F98 = 5; + } + if (D_80196FA0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180EC8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180EC8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_801594E8); + + +extern void (*D_801810DC[])(void); + +void func_80159698(void *a0) { + D_801810DC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180EFC)); + func_80028620(1, &(*(u8 *)&D_80180EFC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180EFC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181180[])(void); + +void func_80159968(void *a0) { + D_80181180[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801812D4[])(void); + +void func_80159B70(void *a0) { + D_801812D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801810F0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801810F0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_009/nonmatchings/ov_SC04_009_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801812DC[])(void); + +void func_8015A264(void *a0) { + D_801812DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181100; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181100); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_009/ov_SC04_009_jr_8015A3C8.c b/src/ov_SC04_009/ov_SC04_009_jr_8015A3C8.c new file mode 100644 index 000000000..bf6469688 --- /dev/null +++ b/src/ov_SC04_009/ov_SC04_009_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181028; +extern u8 D_80180F98; +extern u8 D_80180F74; +extern u8 D_80180F50; +extern u8 D_80181004; +extern u8 D_80180FE0; +extern u8 D_80180FBC; +extern u8 D_80180F2C; +extern void func_80145934(void); +extern u8 D_801810B8; +extern u8 D_80181094; +extern u8 D_80181070; +extern u8 D_8018104C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801804B0[]; +extern unsigned char D_801804E0[]; +extern unsigned char D_80180530[]; +extern unsigned char D_80180560[]; +extern unsigned char D_80180590[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801805E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801806A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180730[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180738; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80196F58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80196F5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180768; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180810[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180834[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180824; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180848[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180854[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180864[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018087C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018086C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180890[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801808AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018089C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801808C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801808D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801808E8; +extern void (*D_80180910[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801808F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018095C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180960[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180DC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180DD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80196F90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180DFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180DDC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180DEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180E3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180E44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180E10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180E50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180E20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80196F98; +extern s32 D_80196FA4; +extern s32 D_80196FA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180E60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80196FA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801810DC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180EFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181180[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801812D4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801810F0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801812DC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181100; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018118C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80181110[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018118C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181110)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018118C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181120 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181120; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181120); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801812E4[])(void); + +void func_8015AD3C(void *a0) { + D_801812E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_010/ov_SC04_010_after.c b/src/ov_SC04_010/ov_SC04_010_after.c index 5d8139151..3e5aa1b96 100644 --- a/src/ov_SC04_010/ov_SC04_010_after.c +++ b/src/ov_SC04_010/ov_SC04_010_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_010/nonmatchings/ov_SC04_010_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FFC8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FFC8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180008[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180008[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018000C[])(void); - -void func_80155580(void *a0) { - D_8018000C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180200[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180200[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180470 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180470[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180470[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180480[])(void); - -void func_80157544(void *a0) { - D_80180480[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018E428; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018E428 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018E428 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801804A8[])(void); -extern int D_8018E428; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801804A8[*(unsigned short *)((char *)param_1 + 2)](); - D_8018E428 = D_8018E428 - 1; - if (D_8018E428 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180488; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180488); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180498; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180498); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801804E8[])(void); - -void func_80157DC4(void *a0) { - D_801804E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801804F0[])(void); - -void func_80157FC4(void *a0) { - D_801804F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801804BC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801804BC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801804FC[])(void); - -void func_8015824C(void *a0) { - D_801804FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801804CC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801804CC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018E430; -extern s32 D_8018E43C; -extern s32 D_8018E440; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018E430 = 0; - D_8018E43C = 1; - D_8018E440 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018E430; -extern s32 D_8018E43C; -extern s32 D_8018E440; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018E430 = 0; - D_8018E43C = 1; - D_8018E440 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180538[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180538[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018E430; - -void func_80158BB0(void *arg0) { - if (D_8018E430 == 0) { - D_8018E430 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018E43C; -extern s32 D_8018050C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018E43C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018050C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018E440; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018E440 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018E430; -extern s32 D_8018E438; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018E430 == 4) { - D_8018E430 = 5; - } - if (D_8018E438 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180574[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180574; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_801594E8); - - -extern void (*D_80180788[])(void); - -void func_80159698(void *a0) { - D_80180788[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801805A8)); - func_80028620(1, &(*(u8 *)&D_801805A8) + 0x10); - func_80028620(2, &(*(u8 *)&D_801805A8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018082C[])(void); - -void func_80159968(void *a0) { - D_8018082C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180980[])(void); - -void func_80159B70(void *a0) { - D_80180980[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018079C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018079C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180988[])(void); - -void func_8015A264(void *a0) { - D_80180988[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801807AC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801807AC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180838[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_801807BC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180838[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801807BC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180838[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801807CC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801807CC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801807CC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180990[])(void); - -void func_8015AD3C(void *a0) { - D_80180990[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8015444C.c b/src/ov_SC04_010/ov_SC04_010_jr_8015444C.c new file mode 100644 index 000000000..f4d932231 --- /dev/null +++ b/src/ov_SC04_010/ov_SC04_010_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801806D4; +extern u8 D_80180644; +extern u8 D_80180620; +extern u8 D_801805FC; +extern u8 D_801806B0; +extern u8 D_8018068C; +extern u8 D_80180668; +extern u8 D_801805D8; +extern void func_80145934(void); +extern u8 D_80180764; +extern u8 D_80180740; +extern u8 D_8018071C; +extern u8 D_801806F8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB5C[]; +extern unsigned char D_8017FB8C[]; +extern unsigned char D_8017FBDC[]; +extern unsigned char D_8017FC0C[]; +extern unsigned char D_8017FC3C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC8C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD54[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FDDC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FDE4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E3F0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E3F4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FE14; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FEBC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FEE0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FED0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEF4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FF00[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FF10[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FF28[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FF18; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FF3C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF58[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FF48; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF6C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF80[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF94; +extern void (*D_8017FFBC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF9C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FFC8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FFC8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180008[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180008[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018000C[])(void); + +void func_80155580(void *a0) { + D_8018000C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180200[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180200[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180470 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180470[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180470[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180480[])(void); + +void func_80157544(void *a0) { + D_80180480[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018E428; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018E428 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018E428 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801804A8[])(void); +extern int D_8018E428; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801804A8[*(unsigned short *)((char *)param_1 + 2)](); + D_8018E428 = D_8018E428 - 1; + if (D_8018E428 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180488; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180488); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180498; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180498); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801804E8[])(void); + +void func_80157DC4(void *a0) { + D_801804E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801804F0[])(void); + +void func_80157FC4(void *a0) { + D_801804F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801804BC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801804BC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801804FC[])(void); + +void func_8015824C(void *a0) { + D_801804FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801804CC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801804CC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018E430; +extern s32 D_8018E43C; +extern s32 D_8018E440; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018E430 = 0; + D_8018E43C = 1; + D_8018E440 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018E430; +extern s32 D_8018E43C; +extern s32 D_8018E440; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018E430 = 0; + D_8018E43C = 1; + D_8018E440 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180538[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180538[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018E430; + +void func_80158BB0(void *arg0) { + if (D_8018E430 == 0) { + D_8018E430 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018E43C; +extern s32 D_8018050C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018E43C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018050C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018E440; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018E440 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E430; +extern s32 D_8018E438; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018E430 == 4) { + D_8018E430 = 5; + } + if (D_8018E438 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180574[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180574; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_801594E8); + + +extern void (*D_80180788[])(void); + +void func_80159698(void *a0) { + D_80180788[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801805A8)); + func_80028620(1, &(*(u8 *)&D_801805A8) + 0x10); + func_80028620(2, &(*(u8 *)&D_801805A8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018082C[])(void); + +void func_80159968(void *a0) { + D_8018082C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180980[])(void); + +void func_80159B70(void *a0) { + D_80180980[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018079C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018079C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_010/nonmatchings/ov_SC04_010_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180988[])(void); + +void func_8015A264(void *a0) { + D_80180988[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801807AC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801807AC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_010/ov_SC04_010_jr_8015A3C8.c b/src/ov_SC04_010/ov_SC04_010_jr_8015A3C8.c new file mode 100644 index 000000000..8b113f404 --- /dev/null +++ b/src/ov_SC04_010/ov_SC04_010_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801806D4; +extern u8 D_80180644; +extern u8 D_80180620; +extern u8 D_801805FC; +extern u8 D_801806B0; +extern u8 D_8018068C; +extern u8 D_80180668; +extern u8 D_801805D8; +extern void func_80145934(void); +extern u8 D_80180764; +extern u8 D_80180740; +extern u8 D_8018071C; +extern u8 D_801806F8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FB5C[]; +extern unsigned char D_8017FB8C[]; +extern unsigned char D_8017FBDC[]; +extern unsigned char D_8017FC0C[]; +extern unsigned char D_8017FC3C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FC8C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FD54[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FDDC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FDE4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E3F0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E3F4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FE14; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FEBC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FEE0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FED0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FEF4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FF00[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FF10[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FF28[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FF18; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FF3C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FF58[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FF48; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FF6C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FF80[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FF94; +extern void (*D_8017FFBC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FF9C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180008[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018000C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180470[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180480[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E428; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801804A8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180488; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180498; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801804E8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801804F0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801804BC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801804FC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801804CC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E430; +extern s32 D_8018E43C; +extern s32 D_8018E440; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180538[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018050C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E438; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180788[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801805A8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018082C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180980[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018079C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180988[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801807AC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180838[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_801807BC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180838[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801807BC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180838[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801807CC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801807CC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801807CC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180990[])(void); + +void func_8015AD3C(void *a0) { + D_80180990[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_011/ov_SC04_011_after.c b/src/ov_SC04_011/ov_SC04_011_after.c index 73a1a635f..d205dcb6c 100644 --- a/src/ov_SC04_011/ov_SC04_011_after.c +++ b/src/ov_SC04_011/ov_SC04_011_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_011/nonmatchings/ov_SC04_011_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80192258[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80192258[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80192298[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80192298[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8019229C[])(void); - -void func_80155580(void *a0) { - D_8019229C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80192490[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80192490[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80192700 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80192700[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80192700[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80192710[])(void); - -void func_80157544(void *a0) { - D_80192710[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EDB90; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EDB90 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EDB90 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80192738[])(void); -extern int D_801EDB90; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80192738[*(unsigned short *)((char *)param_1 + 2)](); - D_801EDB90 = D_801EDB90 - 1; - if (D_801EDB90 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80192718; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80192718); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80192728; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80192728); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80192778[])(void); - -void func_80157DC4(void *a0) { - D_80192778[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80192780[])(void); - -void func_80157FC4(void *a0) { - D_80192780[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8019274C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8019274C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8019278C[])(void); - -void func_8015824C(void *a0) { - D_8019278C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8019275C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8019275C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EDB98; -extern s32 D_801EDBA4; -extern s32 D_801EDBA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EDB98 = 0; - D_801EDBA4 = 1; - D_801EDBA8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EDB98; -extern s32 D_801EDBA4; -extern s32 D_801EDBA8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EDB98 = 0; - D_801EDBA4 = 1; - D_801EDBA8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801927C8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801927C8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EDB98; - -void func_80158BB0(void *arg0) { - if (D_801EDB98 == 0) { - D_801EDB98 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EDBA4; -extern s32 D_8019279C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EDBA4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8019279C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EDBA8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EDBA8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EDB98; -extern s32 D_801EDBA0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EDB98 == 4) { - D_801EDB98 = 5; - } - if (D_801EDBA0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80192804[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80192804; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_801594E8); - - -extern void (*D_80192A18[])(void); - -void func_80159698(void *a0) { - D_80192A18[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80192838)); - func_80028620(1, &(*(u8 *)&D_80192838) + 0x10); - func_80028620(2, &(*(u8 *)&D_80192838) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80192ABC[])(void); - -void func_80159968(void *a0) { - D_80192ABC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80192C10[])(void); - -void func_80159B70(void *a0) { - D_80192C10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80192A2C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80192A2C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80192C18[])(void); - -void func_8015A264(void *a0) { - D_80192C18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80192A3C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80192A3C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80192AC8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80192A4C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80192AC8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192A4C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80192AC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80192A5C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80192A5C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80192A5C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80192C20[])(void); - -void func_8015AD3C(void *a0) { - D_80192C20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8015444C.c b/src/ov_SC04_011/ov_SC04_011_jr_8015444C.c new file mode 100644 index 000000000..c59b76e3d --- /dev/null +++ b/src/ov_SC04_011/ov_SC04_011_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192964; +extern u8 D_801928D4; +extern u8 D_801928B0; +extern u8 D_8019288C; +extern u8 D_80192940; +extern u8 D_8019291C; +extern u8 D_801928F8; +extern u8 D_80192868; +extern void func_80145934(void); +extern u8 D_801929F4; +extern u8 D_801929D0; +extern u8 D_801929AC; +extern u8 D_80192988; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80191DEC[]; +extern unsigned char D_80191E1C[]; +extern unsigned char D_80191E6C[]; +extern unsigned char D_80191E9C[]; +extern unsigned char D_80191ECC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80191F1C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80191FE4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8019206C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192074; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EDB58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EDB5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801920A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8019214C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192170[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192160; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192184[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192190[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801921A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801921B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801921A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801921CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801921E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801921D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801921FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192210[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192224; +extern void (*D_8019224C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8019222C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80192258[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80192258[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80192298[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80192298[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8019229C[])(void); + +void func_80155580(void *a0) { + D_8019229C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80192490[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80192490[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80192700 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80192700[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80192700[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80192710[])(void); + +void func_80157544(void *a0) { + D_80192710[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EDB90; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EDB90 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EDB90 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80192738[])(void); +extern int D_801EDB90; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80192738[*(unsigned short *)((char *)param_1 + 2)](); + D_801EDB90 = D_801EDB90 - 1; + if (D_801EDB90 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192718; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80192718); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80192728; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80192728); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80192778[])(void); + +void func_80157DC4(void *a0) { + D_80192778[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80192780[])(void); + +void func_80157FC4(void *a0) { + D_80192780[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8019274C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8019274C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8019278C[])(void); + +void func_8015824C(void *a0) { + D_8019278C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8019275C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8019275C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EDB98; +extern s32 D_801EDBA4; +extern s32 D_801EDBA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EDB98 = 0; + D_801EDBA4 = 1; + D_801EDBA8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EDB98; +extern s32 D_801EDBA4; +extern s32 D_801EDBA8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EDB98 = 0; + D_801EDBA4 = 1; + D_801EDBA8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801927C8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801927C8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EDB98; + +void func_80158BB0(void *arg0) { + if (D_801EDB98 == 0) { + D_801EDB98 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EDBA4; +extern s32 D_8019279C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EDBA4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8019279C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EDBA8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EDBA8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EDB98; +extern s32 D_801EDBA0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EDB98 == 4) { + D_801EDB98 = 5; + } + if (D_801EDBA0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80192804[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80192804; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_801594E8); + + +extern void (*D_80192A18[])(void); + +void func_80159698(void *a0) { + D_80192A18[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80192838)); + func_80028620(1, &(*(u8 *)&D_80192838) + 0x10); + func_80028620(2, &(*(u8 *)&D_80192838) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80192ABC[])(void); + +void func_80159968(void *a0) { + D_80192ABC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80192C10[])(void); + +void func_80159B70(void *a0) { + D_80192C10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80192A2C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80192A2C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80192C18[])(void); + +void func_8015A264(void *a0) { + D_80192C18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80192A3C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80192A3C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.c b/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.c new file mode 100644 index 000000000..001f84848 --- /dev/null +++ b/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80192964; +extern u8 D_801928D4; +extern u8 D_801928B0; +extern u8 D_8019288C; +extern u8 D_80192940; +extern u8 D_8019291C; +extern u8 D_801928F8; +extern u8 D_80192868; +extern void func_80145934(void); +extern u8 D_801929F4; +extern u8 D_801929D0; +extern u8 D_801929AC; +extern u8 D_80192988; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80191DEC[]; +extern unsigned char D_80191E1C[]; +extern unsigned char D_80191E6C[]; +extern unsigned char D_80191E9C[]; +extern unsigned char D_80191ECC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80191F1C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80191FE4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8019206C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80192074; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EDB58; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EDB5C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801920A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8019214C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80192170[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80192160; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80192184[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80192190[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801921A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801921B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801921A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801921CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801921E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801921D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801921FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80192210[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80192224; +extern void (*D_8019224C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8019222C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80192298[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8019229C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80192700[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80192710[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EDB90; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80192738[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80192718; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80192728; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80192778[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80192780[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8019274C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8019278C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8019275C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EDB98; +extern s32 D_801EDBA4; +extern s32 D_801EDBA8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801927C8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8019279C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EDBA0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80192A18[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80192838[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80192ABC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80192C10[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80192A2C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80192C18[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80192A3C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80192AC8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80192A4C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80192AC8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80192A4C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80192AC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80192A5C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80192A5C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80192A5C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80192C20[])(void); + +void func_8015AD3C(void *a0) { + D_80192C20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_012/ov_SC04_012_after.c b/src/ov_SC04_012/ov_SC04_012_after.c index ef9a5a262..66e34b558 100644 --- a/src/ov_SC04_012/ov_SC04_012_after.c +++ b/src/ov_SC04_012/ov_SC04_012_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_012/nonmatchings/ov_SC04_012_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018042C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018042C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018046C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018046C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180470[])(void); - -void func_80155580(void *a0) { - D_80180470[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180664[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180664[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801808D4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801808D4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801808D4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801808E4[])(void); - -void func_80157544(void *a0) { - D_801808E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80190B00; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80190B00 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80190B00 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018090C[])(void); -extern int D_80190B00; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018090C[*(unsigned short *)((char *)param_1 + 2)](); - D_80190B00 = D_80190B00 - 1; - if (D_80190B00 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801808EC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801808EC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801808FC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801808FC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018094C[])(void); - -void func_80157DC4(void *a0) { - D_8018094C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180954[])(void); - -void func_80157FC4(void *a0) { - D_80180954[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180920; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180920); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180960[])(void); - -void func_8015824C(void *a0) { - D_80180960[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180930; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180930); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80190B08; -extern s32 D_80190B14; -extern s32 D_80190B18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80190B08 = 0; - D_80190B14 = 1; - D_80190B18 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80190B08; -extern s32 D_80190B14; -extern s32 D_80190B18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80190B08 = 0; - D_80190B14 = 1; - D_80190B18 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018099C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018099C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80190B08; - -void func_80158BB0(void *arg0) { - if (D_80190B08 == 0) { - D_80190B08 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80190B14; -extern s32 D_80180970[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80190B14; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180970[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80190B18; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80190B18 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80190B08; -extern s32 D_80190B10; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80190B08 == 4) { - D_80190B08 = 5; - } - if (D_80190B10 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801809D8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801809D8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_801594E8); - - -extern void (*D_80180BEC[])(void); - -void func_80159698(void *a0) { - D_80180BEC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180A0C)); - func_80028620(1, &(*(u8 *)&D_80180A0C) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180A0C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80180C90[])(void); - -void func_80159968(void *a0) { - D_80180C90[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180DE4[])(void); - -void func_80159B70(void *a0) { - D_80180DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80180C00; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180C00); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180DEC[])(void); - -void func_8015A264(void *a0) { - D_80180DEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80180C10; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180C10); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180C9C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u16 D_80180C20[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180C9C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80180C20)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180C9C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180C30 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180C30; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180C30); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180DF4[])(void); - -void func_8015AD3C(void *a0) { - D_80180DF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8015444C.c b/src/ov_SC04_012/ov_SC04_012_jr_8015444C.c new file mode 100644 index 000000000..bd68b6380 --- /dev/null +++ b/src/ov_SC04_012/ov_SC04_012_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B38; +extern u8 D_80180AA8; +extern u8 D_80180A84; +extern u8 D_80180A60; +extern u8 D_80180B14; +extern u8 D_80180AF0; +extern u8 D_80180ACC; +extern u8 D_80180A3C; +extern void func_80145934(void); +extern u8 D_80180BC8; +extern u8 D_80180BA4; +extern u8 D_80180B80; +extern u8 D_80180B5C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFC0[]; +extern unsigned char D_8017FFF0[]; +extern unsigned char D_80180040[]; +extern unsigned char D_80180070[]; +extern unsigned char D_801800A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180240[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180248; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80190AC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80190ACC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180278; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180320[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180344[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180334; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180358[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180364[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180374[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018038C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018037C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801803A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F8; +extern void (*D_80180420[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180400; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018042C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018042C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018046C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018046C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180470[])(void); + +void func_80155580(void *a0) { + D_80180470[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180664[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180664[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801808D4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801808D4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801808D4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801808E4[])(void); + +void func_80157544(void *a0) { + D_801808E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80190B00; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80190B00 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80190B00 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018090C[])(void); +extern int D_80190B00; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018090C[*(unsigned short *)((char *)param_1 + 2)](); + D_80190B00 = D_80190B00 - 1; + if (D_80190B00 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808EC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801808EC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801808FC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801808FC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018094C[])(void); + +void func_80157DC4(void *a0) { + D_8018094C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180954[])(void); + +void func_80157FC4(void *a0) { + D_80180954[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180920; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180920); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180960[])(void); + +void func_8015824C(void *a0) { + D_80180960[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180930; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180930); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80190B08; +extern s32 D_80190B14; +extern s32 D_80190B18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80190B08 = 0; + D_80190B14 = 1; + D_80190B18 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80190B08; +extern s32 D_80190B14; +extern s32 D_80190B18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80190B08 = 0; + D_80190B14 = 1; + D_80190B18 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018099C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018099C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80190B08; + +void func_80158BB0(void *arg0) { + if (D_80190B08 == 0) { + D_80190B08 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80190B14; +extern s32 D_80180970[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80190B14; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180970[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80190B18; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80190B18 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80190B08; +extern s32 D_80190B10; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80190B08 == 4) { + D_80190B08 = 5; + } + if (D_80190B10 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801809D8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801809D8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_801594E8); + + +extern void (*D_80180BEC[])(void); + +void func_80159698(void *a0) { + D_80180BEC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180A0C)); + func_80028620(1, &(*(u8 *)&D_80180A0C) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180A0C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80180C90[])(void); + +void func_80159968(void *a0) { + D_80180C90[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180DE4[])(void); + +void func_80159B70(void *a0) { + D_80180DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80180C00; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180C00); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180DEC[])(void); + +void func_8015A264(void *a0) { + D_80180DEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80180C10; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180C10); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_012/ov_SC04_012_jr_8015A3C8.c b/src/ov_SC04_012/ov_SC04_012_jr_8015A3C8.c new file mode 100644 index 000000000..31ad4c76b --- /dev/null +++ b/src/ov_SC04_012/ov_SC04_012_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180B38; +extern u8 D_80180AA8; +extern u8 D_80180A84; +extern u8 D_80180A60; +extern u8 D_80180B14; +extern u8 D_80180AF0; +extern u8 D_80180ACC; +extern u8 D_80180A3C; +extern void func_80145934(void); +extern u8 D_80180BC8; +extern u8 D_80180BA4; +extern u8 D_80180B80; +extern u8 D_80180B5C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FFC0[]; +extern unsigned char D_8017FFF0[]; +extern unsigned char D_80180040[]; +extern unsigned char D_80180070[]; +extern unsigned char D_801800A0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801800F0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801801B8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180240[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180248; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80190AC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80190ACC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180278; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180320[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180344[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180334; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180358[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180364[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180374[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018038C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018037C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801803A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801803BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801803AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801803D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801803E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801803F8; +extern void (*D_80180420[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180400; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018046C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180470[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801808D4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801808E4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80190B00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018090C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801808EC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801808FC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018094C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180954[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180920; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180960[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180930; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80190B08; +extern s32 D_80190B14; +extern s32 D_80190B18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018099C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180970[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80190B10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180BEC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180A0C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180C90[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180DE4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180C00; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180DEC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180C10; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180C9C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u16 D_80180C20[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180C9C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80180C20)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180C9C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180C30 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180C30; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180C30); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180DF4[])(void); + +void func_8015AD3C(void *a0) { + D_80180DF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_015/ov_SC04_015_after.c b/src/ov_SC04_015/ov_SC04_015_after.c index 25fc0db7b..43516ee39 100644 --- a/src/ov_SC04_015/ov_SC04_015_after.c +++ b/src/ov_SC04_015/ov_SC04_015_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_015/nonmatchings/ov_SC04_015_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186364[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186364[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801863A4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801863A4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801863A8[])(void); - -void func_80155580(void *a0) { - D_801863A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018659C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018659C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018680C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018680C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018680C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018681C[])(void); - -void func_80157544(void *a0) { - D_8018681C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C77E8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C77E8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C77E8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186844[])(void); -extern int D_801C77E8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186844[*(unsigned short *)((char *)param_1 + 2)](); - D_801C77E8 = D_801C77E8 - 1; - if (D_801C77E8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186824; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186824); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186834; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186834); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186884[])(void); - -void func_80157DC4(void *a0) { - D_80186884[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018688C[])(void); - -void func_80157FC4(void *a0) { - D_8018688C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186858; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186858); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186898[])(void); - -void func_8015824C(void *a0) { - D_80186898[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186868; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186868); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C77F0; -extern s32 D_801C77FC; -extern s32 D_801C7800; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C77F0 = 0; - D_801C77FC = 1; - D_801C7800 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C77F0; -extern s32 D_801C77FC; -extern s32 D_801C7800; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C77F0 = 0; - D_801C77FC = 1; - D_801C7800 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801868D4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801868D4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C77F0; - -void func_80158BB0(void *arg0) { - if (D_801C77F0 == 0) { - D_801C77F0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C77FC; -extern s32 D_801868A8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C77FC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801868A8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C7800; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C7800 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C77F0; -extern s32 D_801C77F8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C77F0 == 4) { - D_801C77F0 = 5; - } - if (D_801C77F8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80186910[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80186910; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_801594E8); - - -extern void (*D_80186B24[])(void); - -void func_80159698(void *a0) { - D_80186B24[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80186944)); - func_80028620(1, &(*(u8 *)&D_80186944) + 0x10); - func_80028620(2, &(*(u8 *)&D_80186944) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80186BC8[])(void); - -void func_80159968(void *a0) { - D_80186BC8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80186D1C[])(void); - -void func_80159B70(void *a0) { - D_80186D1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80186B38; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186B38); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80186D24[])(void); - -void func_8015A264(void *a0) { - D_80186D24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80186B48; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186B48); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80186BD4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern char *D_80186B58; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80186BD4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186B58)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80186BD4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186B68 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80186B68; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80186B68); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80186D2C[])(void); - -void func_8015AD3C(void *a0) { - D_80186D2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8015444C.c b/src/ov_SC04_015/ov_SC04_015_jr_8015444C.c new file mode 100644 index 000000000..f490b92f3 --- /dev/null +++ b/src/ov_SC04_015/ov_SC04_015_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A70; +extern u8 D_801869E0; +extern u8 D_801869BC; +extern u8 D_80186998; +extern u8 D_80186A4C; +extern u8 D_80186A28; +extern u8 D_80186A04; +extern u8 D_80186974; +extern void func_80145934(void); +extern u8 D_80186B00; +extern u8 D_80186ADC; +extern u8 D_80186AB8; +extern u8 D_80186A94; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185EF8[]; +extern unsigned char D_80185F28[]; +extern unsigned char D_80185F78[]; +extern unsigned char D_80185FA8[]; +extern unsigned char D_80185FD8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186028[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801860F0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186178[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186180; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C77B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C77B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801861B0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186258[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018627C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018626C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186290[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018629C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801862AC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801862C4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801862B4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801862D8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801862F4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801862E4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186308[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018631C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186330; +extern void (*D_80186358[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186338; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186364[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186364[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801863A4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801863A4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801863A8[])(void); + +void func_80155580(void *a0) { + D_801863A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018659C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018659C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018680C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018680C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018680C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018681C[])(void); + +void func_80157544(void *a0) { + D_8018681C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C77E8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C77E8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C77E8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186844[])(void); +extern int D_801C77E8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186844[*(unsigned short *)((char *)param_1 + 2)](); + D_801C77E8 = D_801C77E8 - 1; + if (D_801C77E8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186824; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186824); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186834; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186834); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186884[])(void); + +void func_80157DC4(void *a0) { + D_80186884[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018688C[])(void); + +void func_80157FC4(void *a0) { + D_8018688C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186858; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186858); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186898[])(void); + +void func_8015824C(void *a0) { + D_80186898[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186868; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186868); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C77F0; +extern s32 D_801C77FC; +extern s32 D_801C7800; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C77F0 = 0; + D_801C77FC = 1; + D_801C7800 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C77F0; +extern s32 D_801C77FC; +extern s32 D_801C7800; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C77F0 = 0; + D_801C77FC = 1; + D_801C7800 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801868D4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801868D4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C77F0; + +void func_80158BB0(void *arg0) { + if (D_801C77F0 == 0) { + D_801C77F0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C77FC; +extern s32 D_801868A8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C77FC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801868A8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C7800; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C7800 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C77F0; +extern s32 D_801C77F8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C77F0 == 4) { + D_801C77F0 = 5; + } + if (D_801C77F8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80186910[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80186910; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_801594E8); + + +extern void (*D_80186B24[])(void); + +void func_80159698(void *a0) { + D_80186B24[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80186944)); + func_80028620(1, &(*(u8 *)&D_80186944) + 0x10); + func_80028620(2, &(*(u8 *)&D_80186944) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80186BC8[])(void); + +void func_80159968(void *a0) { + D_80186BC8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80186D1C[])(void); + +void func_80159B70(void *a0) { + D_80186D1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80186B38; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80186B38); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80186D24[])(void); + +void func_8015A264(void *a0) { + D_80186D24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80186B48; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80186B48); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_015/ov_SC04_015_jr_8015A3C8.c b/src/ov_SC04_015/ov_SC04_015_jr_8015A3C8.c new file mode 100644 index 000000000..b97992571 --- /dev/null +++ b/src/ov_SC04_015/ov_SC04_015_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80186A70; +extern u8 D_801869E0; +extern u8 D_801869BC; +extern u8 D_80186998; +extern u8 D_80186A4C; +extern u8 D_80186A28; +extern u8 D_80186A04; +extern u8 D_80186974; +extern void func_80145934(void); +extern u8 D_80186B00; +extern u8 D_80186ADC; +extern u8 D_80186AB8; +extern u8 D_80186A94; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80185EF8[]; +extern unsigned char D_80185F28[]; +extern unsigned char D_80185F78[]; +extern unsigned char D_80185FA8[]; +extern unsigned char D_80185FD8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186028[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801860F0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186178[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186180; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C77B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C77B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801861B0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186258[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018627C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018626C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186290[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018629C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801862AC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801862C4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801862B4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801862D8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801862F4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801862E4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186308[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018631C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186330; +extern void (*D_80186358[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186338; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801863A4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801863A8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018680C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018681C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C77E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186844[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186824; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186834; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186884[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018688C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186858; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186898[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186868; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C77F0; +extern s32 D_801C77FC; +extern s32 D_801C7800; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801868D4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801868A8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C77F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80186B24[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80186944[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80186BC8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80186D1C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80186B38; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80186D24[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80186B48; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80186BD4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char *D_80186B58; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80186BD4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80186B58)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80186BD4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80186B68 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186B68; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80186B68); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80186D2C[])(void); + +void func_8015AD3C(void *a0) { + D_80186D2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_016/ov_SC04_016_after.c b/src/ov_SC04_016/ov_SC04_016_after.c index ec89b1084..18ace40de 100644 --- a/src/ov_SC04_016/ov_SC04_016_after.c +++ b/src/ov_SC04_016/ov_SC04_016_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_016/nonmatchings/ov_SC04_016_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80181E28[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80181E28[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181E68[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181E68[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181E6C[])(void); - -void func_80155580(void *a0) { - D_80181E6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182060[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182060[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801822D0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801822D0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801822D0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801822E0[])(void); - -void func_80157544(void *a0) { - D_801822E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A5990; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A5990 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A5990 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182308[])(void); -extern int D_801A5990; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182308[*(unsigned short *)((char *)param_1 + 2)](); - D_801A5990 = D_801A5990 - 1; - if (D_801A5990 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801822E8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801822E8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801822F8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801822F8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182348[])(void); - -void func_80157DC4(void *a0) { - D_80182348[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182350[])(void); - -void func_80157FC4(void *a0) { - D_80182350[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018231C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018231C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018235C[])(void); - -void func_8015824C(void *a0) { - D_8018235C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018232C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018232C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A5998; -extern s32 D_801A59A4; -extern s32 D_801A59A8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A5998 = 0; - D_801A59A4 = 1; - D_801A59A8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A5998; -extern s32 D_801A59A4; -extern s32 D_801A59A8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A5998 = 0; - D_801A59A4 = 1; - D_801A59A8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80182398[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80182398[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A5998; - -void func_80158BB0(void *arg0) { - if (D_801A5998 == 0) { - D_801A5998 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A59A4; -extern s32 D_8018236C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A59A4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018236C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A59A8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A59A8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A5998; -extern s32 D_801A59A0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A5998 == 4) { - D_801A5998 = 5; - } - if (D_801A59A0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801823D4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801823D4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_801594E8); - - -extern void (*D_801825E8[])(void); - -void func_80159698(void *a0) { - D_801825E8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80182408)); - func_80028620(1, &(*(u8 *)&D_80182408) + 0x10); - func_80028620(2, &(*(u8 *)&D_80182408) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018268C[])(void); - -void func_80159968(void *a0) { - D_8018268C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801827E0[])(void); - -void func_80159B70(void *a0) { - D_801827E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801825FC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801825FC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801827E8[])(void); - -void func_8015A264(void *a0) { - D_801827E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018260C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018260C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182698[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_8018261C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182698[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018261C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182698[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018262C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018262C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018262C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801827F0[])(void); - -void func_8015AD3C(void *a0) { - D_801827F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8015444C.c b/src/ov_SC04_016/ov_SC04_016_jr_8015444C.c new file mode 100644 index 000000000..50a8632bc --- /dev/null +++ b/src/ov_SC04_016/ov_SC04_016_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182534; +extern u8 D_801824A4; +extern u8 D_80182480; +extern u8 D_8018245C; +extern u8 D_80182510; +extern u8 D_801824EC; +extern u8 D_801824C8; +extern u8 D_80182438; +extern void func_80145934(void); +extern u8 D_801825C4; +extern u8 D_801825A0; +extern u8 D_8018257C; +extern u8 D_80182558; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801819BC[]; +extern unsigned char D_801819EC[]; +extern unsigned char D_80181A3C[]; +extern unsigned char D_80181A6C[]; +extern unsigned char D_80181A9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181AEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181BB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181C3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181C44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A5958; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A595C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181C74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181D1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181D40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181D30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181D54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181D60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181D70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181D88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181D78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181D9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181DB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181DA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181DCC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181DE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181DF4; +extern void (*D_80181E1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181DFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80181E28[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80181E28[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181E68[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181E68[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181E6C[])(void); + +void func_80155580(void *a0) { + D_80181E6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182060[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182060[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801822D0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801822D0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801822D0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801822E0[])(void); + +void func_80157544(void *a0) { + D_801822E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A5990; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A5990 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A5990 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182308[])(void); +extern int D_801A5990; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182308[*(unsigned short *)((char *)param_1 + 2)](); + D_801A5990 = D_801A5990 - 1; + if (D_801A5990 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801822E8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801822E8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801822F8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801822F8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182348[])(void); + +void func_80157DC4(void *a0) { + D_80182348[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182350[])(void); + +void func_80157FC4(void *a0) { + D_80182350[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018231C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018231C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018235C[])(void); + +void func_8015824C(void *a0) { + D_8018235C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018232C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018232C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A5998; +extern s32 D_801A59A4; +extern s32 D_801A59A8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A5998 = 0; + D_801A59A4 = 1; + D_801A59A8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A5998; +extern s32 D_801A59A4; +extern s32 D_801A59A8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A5998 = 0; + D_801A59A4 = 1; + D_801A59A8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80182398[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80182398[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A5998; + +void func_80158BB0(void *arg0) { + if (D_801A5998 == 0) { + D_801A5998 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A59A4; +extern s32 D_8018236C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A59A4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018236C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A59A8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A59A8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A5998; +extern s32 D_801A59A0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A5998 == 4) { + D_801A5998 = 5; + } + if (D_801A59A0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801823D4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801823D4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_801594E8); + + +extern void (*D_801825E8[])(void); + +void func_80159698(void *a0) { + D_801825E8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80182408)); + func_80028620(1, &(*(u8 *)&D_80182408) + 0x10); + func_80028620(2, &(*(u8 *)&D_80182408) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018268C[])(void); + +void func_80159968(void *a0) { + D_8018268C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801827E0[])(void); + +void func_80159B70(void *a0) { + D_801827E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801825FC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801825FC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801827E8[])(void); + +void func_8015A264(void *a0) { + D_801827E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018260C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018260C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_016/ov_SC04_016_jr_8015A3C8.c b/src/ov_SC04_016/ov_SC04_016_jr_8015A3C8.c new file mode 100644 index 000000000..781380855 --- /dev/null +++ b/src/ov_SC04_016/ov_SC04_016_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182534; +extern u8 D_801824A4; +extern u8 D_80182480; +extern u8 D_8018245C; +extern u8 D_80182510; +extern u8 D_801824EC; +extern u8 D_801824C8; +extern u8 D_80182438; +extern void func_80145934(void); +extern u8 D_801825C4; +extern u8 D_801825A0; +extern u8 D_8018257C; +extern u8 D_80182558; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801819BC[]; +extern unsigned char D_801819EC[]; +extern unsigned char D_80181A3C[]; +extern unsigned char D_80181A6C[]; +extern unsigned char D_80181A9C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181AEC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181BB4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181C3C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181C44; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A5958; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A595C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181C74; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181D1C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181D40[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181D30; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181D54[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181D60[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181D70[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181D88[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181D78; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181D9C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181DB8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181DA8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181DCC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181DE0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181DF4; +extern void (*D_80181E1C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181DFC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181E68[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181E6C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801822D0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801822E0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A5990; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182308[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801822E8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801822F8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182348[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182350[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018231C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018235C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018232C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A5998; +extern s32 D_801A59A4; +extern s32 D_801A59A8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182398[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018236C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A59A0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801825E8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182408[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018268C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801827E0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801825FC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801827E8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018260C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182698[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_8018261C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182698[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018261C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182698[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018262C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018262C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018262C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801827F0[])(void); + +void func_8015AD3C(void *a0) { + D_801827F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_018/ov_SC04_018_after.c b/src/ov_SC04_018/ov_SC04_018_after.c index b3cfe6d26..0b9e615b6 100644 --- a/src/ov_SC04_018/ov_SC04_018_after.c +++ b/src/ov_SC04_018/ov_SC04_018_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_018/nonmatchings/ov_SC04_018_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018F040[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018F040[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018F080[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018F080[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018F084[])(void); - -void func_80155580(void *a0) { - D_8018F084[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018F278[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018F278[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4E8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F4E8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018F4E8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018F4F8[])(void); - -void func_80157544(void *a0) { - D_8018F4F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E5BE0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E5BE0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E5BE0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018F520[])(void); -extern int D_801E5BE0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018F520[*(unsigned short *)((char *)param_1 + 2)](); - D_801E5BE0 = D_801E5BE0 - 1; - if (D_801E5BE0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F500; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F500); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018F510; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F510); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018F560[])(void); - -void func_80157DC4(void *a0) { - D_8018F560[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018F568[])(void); - -void func_80157FC4(void *a0) { - D_8018F568[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018F534; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018F534); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018F574[])(void); - -void func_8015824C(void *a0) { - D_8018F574[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018F544; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F544); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E5BE8; -extern s32 D_801E5BF4; -extern s32 D_801E5BF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E5BE8 = 0; - D_801E5BF4 = 1; - D_801E5BF8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E5BE8; -extern s32 D_801E5BF4; -extern s32 D_801E5BF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E5BE8 = 0; - D_801E5BF4 = 1; - D_801E5BF8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018F5B0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018F5B0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E5BE8; - -void func_80158BB0(void *arg0) { - if (D_801E5BE8 == 0) { - D_801E5BE8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E5BF4; -extern s32 D_8018F584[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E5BF4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F584[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E5BF8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E5BF8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E5BE8; -extern s32 D_801E5BF0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E5BE8 == 4) { - D_801E5BE8 = 5; - } - if (D_801E5BF0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018F5EC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018F5EC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_801594E8); - - -extern void (*D_8018F800[])(void); - -void func_80159698(void *a0) { - D_8018F800[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018F620)); - func_80028620(1, &(*(u8 *)&D_8018F620) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018F620) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018F8A4[])(void); - -void func_80159968(void *a0) { - D_8018F8A4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018F9F8[])(void); - -void func_80159B70(void *a0) { - D_8018F9F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018F814; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F814); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018FA00[])(void); - -void func_8015A264(void *a0) { - D_8018FA00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018F824; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F824); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018F8B0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_8018F834; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F844 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018F844; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018F844); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018FA08[])(void); - -void func_8015AD3C(void *a0) { - D_8018FA08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8015444C.c b/src/ov_SC04_018/ov_SC04_018_jr_8015444C.c new file mode 100644 index 000000000..76efcd708 --- /dev/null +++ b/src/ov_SC04_018/ov_SC04_018_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018F040[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018F040[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018F080[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018F080[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018F084[])(void); + +void func_80155580(void *a0) { + D_8018F084[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018F278[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018F278[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4E8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018F4E8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018F4F8[])(void); + +void func_80157544(void *a0) { + D_8018F4F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E5BE0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E5BE0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E5BE0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018F520[])(void); +extern int D_801E5BE0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018F520[*(unsigned short *)((char *)param_1 + 2)](); + D_801E5BE0 = D_801E5BE0 - 1; + if (D_801E5BE0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F500); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F510); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018F560[])(void); + +void func_80157DC4(void *a0) { + D_8018F560[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018F568[])(void); + +void func_80157FC4(void *a0) { + D_8018F568[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018F534; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018F534); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018F574[])(void); + +void func_8015824C(void *a0) { + D_8018F574[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018F544; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F544); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E5BE8 = 0; + D_801E5BF4 = 1; + D_801E5BF8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E5BE8 = 0; + D_801E5BF4 = 1; + D_801E5BF8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018F5B0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018F5B0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E5BE8; + +void func_80158BB0(void *arg0) { + if (D_801E5BE8 == 0) { + D_801E5BE8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E5BF4; +extern s32 D_8018F584[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E5BF4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F584[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E5BF8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E5BF8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BE8; +extern s32 D_801E5BF0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E5BE8 == 4) { + D_801E5BE8 = 5; + } + if (D_801E5BF0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018F5EC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018F5EC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_801594E8); + + +extern void (*D_8018F800[])(void); + +void func_80159698(void *a0) { + D_8018F800[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018F620)); + func_80028620(1, &(*(u8 *)&D_8018F620) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018F620) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018F8A4[])(void); + +void func_80159968(void *a0) { + D_8018F8A4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018F9F8[])(void); + +void func_80159B70(void *a0) { + D_8018F9F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018F814; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F814); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018FA00[])(void); + +void func_8015A264(void *a0) { + D_8018FA00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018F824; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F824); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8015A3C8.c b/src/ov_SC04_018/ov_SC04_018_jr_8015A3C8.c new file mode 100644 index 000000000..27cb28e25 --- /dev/null +++ b/src/ov_SC04_018/ov_SC04_018_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F080[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F084[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4F8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5BE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F520[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F560[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F568[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F534; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F574[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F544; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F5B0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F584[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F800[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F620[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F8A4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9F8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F814; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F824; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F8B0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018F834; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F844 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F844; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018F844); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018FA08[])(void); + +void func_8015AD3C(void *a0) { + D_8018FA08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_019/ov_SC04_019_after.c b/src/ov_SC04_019/ov_SC04_019_after.c index f8b6763dc..ee4004062 100644 --- a/src/ov_SC04_019/ov_SC04_019_after.c +++ b/src/ov_SC04_019/ov_SC04_019_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_019/nonmatchings/ov_SC04_019_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018F040[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018F040[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018F080[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018F080[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018F084[])(void); - -void func_80155580(void *a0) { - D_8018F084[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018F278[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018F278[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4E8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F4E8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018F4E8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018F4F8[])(void); - -void func_80157544(void *a0) { - D_8018F4F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E5BE0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E5BE0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E5BE0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018F520[])(void); -extern int D_801E5BE0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018F520[*(unsigned short *)((char *)param_1 + 2)](); - D_801E5BE0 = D_801E5BE0 - 1; - if (D_801E5BE0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F500; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F500); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018F510; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F510); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018F560[])(void); - -void func_80157DC4(void *a0) { - D_8018F560[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018F568[])(void); - -void func_80157FC4(void *a0) { - D_8018F568[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018F534; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018F534); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018F574[])(void); - -void func_8015824C(void *a0) { - D_8018F574[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018F544; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F544); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E5BE8; -extern s32 D_801E5BF4; -extern s32 D_801E5BF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E5BE8 = 0; - D_801E5BF4 = 1; - D_801E5BF8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E5BE8; -extern s32 D_801E5BF4; -extern s32 D_801E5BF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E5BE8 = 0; - D_801E5BF4 = 1; - D_801E5BF8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018F5B0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018F5B0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E5BE8; - -void func_80158BB0(void *arg0) { - if (D_801E5BE8 == 0) { - D_801E5BE8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E5BF4; -extern s32 D_8018F584[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E5BF4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F584[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E5BF8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E5BF8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E5BE8; -extern s32 D_801E5BF0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E5BE8 == 4) { - D_801E5BE8 = 5; - } - if (D_801E5BF0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018F5EC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018F5EC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_801594E8); - - -extern void (*D_8018F800[])(void); - -void func_80159698(void *a0) { - D_8018F800[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018F620)); - func_80028620(1, &(*(u8 *)&D_8018F620) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018F620) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018F8A4[])(void); - -void func_80159968(void *a0) { - D_8018F8A4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018F9F8[])(void); - -void func_80159B70(void *a0) { - D_8018F9F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018F814; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F814); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018FA00[])(void); - -void func_8015A264(void *a0) { - D_8018FA00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018F824; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F824); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018F8B0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_8018F834; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018F8B0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F844 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018F844; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018F844); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018FA08[])(void); - -void func_8015AD3C(void *a0) { - D_8018FA08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8015444C.c b/src/ov_SC04_019/ov_SC04_019_jr_8015444C.c new file mode 100644 index 000000000..a2e39cb5a --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018F040[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018F040[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018F080[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018F080[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018F084[])(void); + +void func_80155580(void *a0) { + D_8018F084[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018F278[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018F278[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4E8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018F4E8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018F4F8[])(void); + +void func_80157544(void *a0) { + D_8018F4F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E5BE0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E5BE0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E5BE0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018F520[])(void); +extern int D_801E5BE0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018F520[*(unsigned short *)((char *)param_1 + 2)](); + D_801E5BE0 = D_801E5BE0 - 1; + if (D_801E5BE0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F500); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F510); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018F560[])(void); + +void func_80157DC4(void *a0) { + D_8018F560[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018F568[])(void); + +void func_80157FC4(void *a0) { + D_8018F568[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018F534; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018F534); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018F574[])(void); + +void func_8015824C(void *a0) { + D_8018F574[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018F544; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F544); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E5BE8 = 0; + D_801E5BF4 = 1; + D_801E5BF8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E5BE8 = 0; + D_801E5BF4 = 1; + D_801E5BF8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018F5B0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018F5B0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E5BE8; + +void func_80158BB0(void *arg0) { + if (D_801E5BE8 == 0) { + D_801E5BE8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E5BF4; +extern s32 D_8018F584[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E5BF4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F584[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E5BF8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E5BF8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BE8; +extern s32 D_801E5BF0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E5BE8 == 4) { + D_801E5BE8 = 5; + } + if (D_801E5BF0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018F5EC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018F5EC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_801594E8); + + +extern void (*D_8018F800[])(void); + +void func_80159698(void *a0) { + D_8018F800[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018F620)); + func_80028620(1, &(*(u8 *)&D_8018F620) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018F620) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018F8A4[])(void); + +void func_80159968(void *a0) { + D_8018F8A4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018F9F8[])(void); + +void func_80159B70(void *a0) { + D_8018F9F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018F814; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F814); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018FA00[])(void); + +void func_8015A264(void *a0) { + D_8018FA00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018F824; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F824); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_019/ov_SC04_019_jr_8015A3C8.c b/src/ov_SC04_019/ov_SC04_019_jr_8015A3C8.c new file mode 100644 index 000000000..27cb28e25 --- /dev/null +++ b/src/ov_SC04_019/ov_SC04_019_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F74C; +extern u8 D_8018F6BC; +extern u8 D_8018F698; +extern u8 D_8018F674; +extern u8 D_8018F728; +extern u8 D_8018F704; +extern u8 D_8018F6E0; +extern u8 D_8018F650; +extern void func_80145934(void); +extern u8 D_8018F7DC; +extern u8 D_8018F7B8; +extern u8 D_8018F794; +extern u8 D_8018F770; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EBD4[]; +extern unsigned char D_8018EC04[]; +extern unsigned char D_8018EC54[]; +extern unsigned char D_8018EC84[]; +extern unsigned char D_8018ECB4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ED04[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EDCC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE54[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE5C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5BA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5BAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE8C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EF34[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF58[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF48; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF6C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF78[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF88[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EFA0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF90; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EFB4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EFD0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EFC0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFE4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFF8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F00C; +extern void (*D_8018F034[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F014; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F080[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F084[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4E8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4F8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5BE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F520[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F500; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F510; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F560[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F568[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F534; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F574[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F544; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5BE8; +extern s32 D_801E5BF4; +extern s32 D_801E5BF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F5B0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F584[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5BF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F800[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F620[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F8A4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9F8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F814; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FA00[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F824; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F8B0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018F834; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F834)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F8B0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F844 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F844; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018F844); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018FA08[])(void); + +void func_8015AD3C(void *a0) { + D_8018FA08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_020/ov_SC04_020_after.c b/src/ov_SC04_020/ov_SC04_020_after.c index f40d31473..31c2f186d 100644 --- a/src/ov_SC04_020/ov_SC04_020_after.c +++ b/src/ov_SC04_020/ov_SC04_020_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_020/nonmatchings/ov_SC04_020_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80185178[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80185178[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801851B8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801851B8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801851BC[])(void); - -void func_80155580(void *a0) { - D_801851BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801853B0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801853B0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185620 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80185620[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80185620[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80185630[])(void); - -void func_80157544(void *a0) { - D_80185630[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801BB1F0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801BB1F0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801BB1F0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80185658[])(void); -extern int D_801BB1F0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80185658[*(unsigned short *)((char *)param_1 + 2)](); - D_801BB1F0 = D_801BB1F0 - 1; - if (D_801BB1F0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80185638; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185638); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80185648; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185648); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80185698[])(void); - -void func_80157DC4(void *a0) { - D_80185698[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801856A0[])(void); - -void func_80157FC4(void *a0) { - D_801856A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018566C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018566C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801856AC[])(void); - -void func_8015824C(void *a0) { - D_801856AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018567C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018567C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801BB1F8; -extern s32 D_801BB204; -extern s32 D_801BB208; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801BB1F8 = 0; - D_801BB204 = 1; - D_801BB208 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801BB1F8; -extern s32 D_801BB204; -extern s32 D_801BB208; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801BB1F8 = 0; - D_801BB204 = 1; - D_801BB208 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801856E8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801856E8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801BB1F8; - -void func_80158BB0(void *arg0) { - if (D_801BB1F8 == 0) { - D_801BB1F8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801BB204; -extern s32 D_801856BC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801BB204; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801856BC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801BB208; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801BB208 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801BB1F8; -extern s32 D_801BB200; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801BB1F8 == 4) { - D_801BB1F8 = 5; - } - if (D_801BB200 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80185724[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80185724; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_801594E8); - - -extern void (*D_80185938[])(void); - -void func_80159698(void *a0) { - D_80185938[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80185758)); - func_80028620(1, &(*(u8 *)&D_80185758) + 0x10); - func_80028620(2, &(*(u8 *)&D_80185758) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801859DC[])(void); - -void func_80159968(void *a0) { - D_801859DC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185B30[])(void); - -void func_80159B70(void *a0) { - D_80185B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018594C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018594C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80185B38[])(void); - -void func_8015A264(void *a0) { - D_80185B38[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018595C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018595C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801859E8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_8018596C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801859E8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018596C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801859E8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018597C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018597C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018597C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80185B40[])(void); - -void func_8015AD3C(void *a0) { - D_80185B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8015444C.c b/src/ov_SC04_020/ov_SC04_020_jr_8015444C.c new file mode 100644 index 000000000..cbf371757 --- /dev/null +++ b/src/ov_SC04_020/ov_SC04_020_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185884; +extern u8 D_801857F4; +extern u8 D_801857D0; +extern u8 D_801857AC; +extern u8 D_80185860; +extern u8 D_8018583C; +extern u8 D_80185818; +extern u8 D_80185788; +extern void func_80145934(void); +extern u8 D_80185914; +extern u8 D_801858F0; +extern u8 D_801858CC; +extern u8 D_801858A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184D0C[]; +extern unsigned char D_80184D3C[]; +extern unsigned char D_80184D8C[]; +extern unsigned char D_80184DBC[]; +extern unsigned char D_80184DEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184E3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184F04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184F8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184F94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BB1B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BB1BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184FC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018506C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801850A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801850B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801850C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801850D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801850C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801850EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801850F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018511C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185144; +extern void (*D_8018516C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018514C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80185178[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80185178[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801851B8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801851B8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801851BC[])(void); + +void func_80155580(void *a0) { + D_801851BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801853B0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801853B0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80185620 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80185620[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80185620[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80185630[])(void); + +void func_80157544(void *a0) { + D_80185630[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801BB1F0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801BB1F0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801BB1F0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80185658[])(void); +extern int D_801BB1F0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80185658[*(unsigned short *)((char *)param_1 + 2)](); + D_801BB1F0 = D_801BB1F0 - 1; + if (D_801BB1F0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185638; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80185638); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80185648; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80185648); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80185698[])(void); + +void func_80157DC4(void *a0) { + D_80185698[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801856A0[])(void); + +void func_80157FC4(void *a0) { + D_801856A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018566C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018566C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801856AC[])(void); + +void func_8015824C(void *a0) { + D_801856AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018567C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018567C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801BB1F8; +extern s32 D_801BB204; +extern s32 D_801BB208; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801BB1F8 = 0; + D_801BB204 = 1; + D_801BB208 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801BB1F8; +extern s32 D_801BB204; +extern s32 D_801BB208; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801BB1F8 = 0; + D_801BB204 = 1; + D_801BB208 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801856E8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801856E8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801BB1F8; + +void func_80158BB0(void *arg0) { + if (D_801BB1F8 == 0) { + D_801BB1F8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801BB204; +extern s32 D_801856BC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801BB204; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801856BC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801BB208; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801BB208 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801BB1F8; +extern s32 D_801BB200; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801BB1F8 == 4) { + D_801BB1F8 = 5; + } + if (D_801BB200 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80185724[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80185724; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_801594E8); + + +extern void (*D_80185938[])(void); + +void func_80159698(void *a0) { + D_80185938[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80185758)); + func_80028620(1, &(*(u8 *)&D_80185758) + 0x10); + func_80028620(2, &(*(u8 *)&D_80185758) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801859DC[])(void); + +void func_80159968(void *a0) { + D_801859DC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185B30[])(void); + +void func_80159B70(void *a0) { + D_80185B30[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018594C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018594C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80185B38[])(void); + +void func_8015A264(void *a0) { + D_80185B38[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018595C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018595C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8015A3C8.c b/src/ov_SC04_020/ov_SC04_020_jr_8015A3C8.c new file mode 100644 index 000000000..50d16ef52 --- /dev/null +++ b/src/ov_SC04_020/ov_SC04_020_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80185884; +extern u8 D_801857F4; +extern u8 D_801857D0; +extern u8 D_801857AC; +extern u8 D_80185860; +extern u8 D_8018583C; +extern u8 D_80185818; +extern u8 D_80185788; +extern void func_80145934(void); +extern u8 D_80185914; +extern u8 D_801858F0; +extern u8 D_801858CC; +extern u8 D_801858A8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184D0C[]; +extern unsigned char D_80184D3C[]; +extern unsigned char D_80184D8C[]; +extern unsigned char D_80184DBC[]; +extern unsigned char D_80184DEC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184E3C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184F04[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184F8C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184F94; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801BB1B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801BB1BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80184FC4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018506C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80185090[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80185080; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801850A4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801850B0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801850C0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801850D8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801850C8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801850EC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80185108[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801850F8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018511C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80185130[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80185144; +extern void (*D_8018516C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018514C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801851B8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801851BC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80185620[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80185630[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801BB1F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80185658[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80185638; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80185648; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80185698[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801856A0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018566C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801856AC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018567C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801BB1F8; +extern s32 D_801BB204; +extern s32 D_801BB208; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801856E8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801856BC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801BB200; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80185938[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80185758[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801859DC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185B30[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018594C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80185B38[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018595C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801859E8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_8018596C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801859E8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018596C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801859E8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018597C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018597C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018597C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80185B40[])(void); + +void func_8015AD3C(void *a0) { + D_80185B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC04_021/ov_SC04_021_after.c b/src/ov_SC04_021/ov_SC04_021_after.c index 47502f858..53ae1a249 100644 --- a/src/ov_SC04_021/ov_SC04_021_after.c +++ b/src/ov_SC04_021/ov_SC04_021_after.c @@ -2616,1309 +2616,3 @@ 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_SC04_021/nonmatchings/ov_SC04_021_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", 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) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801810A4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801810E4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801810E4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801810E8[])(void); - -void func_80155580(void *a0) { - D_801810E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801812DC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801812DC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018154C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018154C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018155C[])(void); - -void func_80157544(void *a0) { - D_8018155C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018E848; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018E848 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018E848 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181584[])(void); -extern int D_8018E848; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181584[*(unsigned short *)((char *)param_1 + 2)](); - D_8018E848 = D_8018E848 - 1; - if (D_8018E848 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181564; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181574; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801815C4[])(void); - -void func_80157DC4(void *a0) { - D_801815C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801815CC[])(void); - -void func_80157FC4(void *a0) { - D_801815CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181598; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181598); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801815D8[])(void); - -void func_8015824C(void *a0) { - D_801815D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801815A8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181614[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181614[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018E850; - -void func_80158BB0(void *arg0) { - if (D_8018E850 == 0) { - D_8018E850 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018E85C; -extern s32 D_801815E8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018E85C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018E860; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018E860 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018E850; -extern s32 D_8018E858; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018E850 == 4) { - D_8018E850 = 5; - } - if (D_8018E858 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181650[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181650; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_801594E8); - - -extern void (*D_80181864[])(void); - -void func_80159698(void *a0) { - D_80181864[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181684)); - func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181908[])(void); - -void func_80159968(void *a0) { - D_80181908[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181A5C[])(void); - -void func_80159B70(void *a0) { - D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181878; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181A64[])(void); - -void func_8015A264(void *a0) { - D_80181A64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181888; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181914[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80181898; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181914[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801818A8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801818A8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181A6C[])(void); - -void func_8015AD3C(void *a0) { - D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8015444C.c b/src/ov_SC04_021/ov_SC04_021_jr_8015444C.c new file mode 100644 index 000000000..352df5461 --- /dev/null +++ b/src/ov_SC04_021/ov_SC04_021_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801810A4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801810E4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801810E4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801810E8[])(void); + +void func_80155580(void *a0) { + D_801810E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801812DC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801812DC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018154C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018155C[])(void); + +void func_80157544(void *a0) { + D_8018155C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018E848; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018E848 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018E848 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181584[])(void); +extern int D_8018E848; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181584[*(unsigned short *)((char *)param_1 + 2)](); + D_8018E848 = D_8018E848 - 1; + if (D_8018E848 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181574; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801815C4[])(void); + +void func_80157DC4(void *a0) { + D_801815C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801815CC[])(void); + +void func_80157FC4(void *a0) { + D_801815CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181598; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181598); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801815D8[])(void); + +void func_8015824C(void *a0) { + D_801815D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801815A8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181614[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181614[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018E850; + +void func_80158BB0(void *arg0) { + if (D_8018E850 == 0) { + D_8018E850 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018E85C; +extern s32 D_801815E8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018E85C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018E860; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018E860 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E850; +extern s32 D_8018E858; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018E850 == 4) { + D_8018E850 = 5; + } + if (D_8018E858 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181650[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181650; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_801594E8); + + +extern void (*D_80181864[])(void); + +void func_80159698(void *a0) { + D_80181864[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181684)); + func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181908[])(void); + +void func_80159968(void *a0) { + D_80181908[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181A5C[])(void); + +void func_80159B70(void *a0) { + D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181878; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC04_021/nonmatchings/ov_SC04_021_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181A64[])(void); + +void func_8015A264(void *a0) { + D_80181A64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181888; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC04_021/ov_SC04_021_jr_8015A3C8.c b/src/ov_SC04_021/ov_SC04_021_jr_8015A3C8.c new file mode 100644 index 000000000..43cb291ad --- /dev/null +++ b/src/ov_SC04_021/ov_SC04_021_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801818A8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181A6C[])(void); + +void func_8015AD3C(void *a0) { + D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_000/ov_SC05_000_after.c b/src/ov_SC05_000/ov_SC05_000_after.c index dfa133d27..baee7c277 100644 --- a/src/ov_SC05_000/ov_SC05_000_after.c +++ b/src/ov_SC05_000/ov_SC05_000_after.c @@ -2610,1309 +2610,3 @@ 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_SC05_000/nonmatchings/ov_SC05_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801800B8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801800B8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801800F8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801800F8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801800FC[])(void); - -void func_80155580(void *a0) { - D_801800FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801802F0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801802F0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180560 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180560[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180560[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180570[])(void); - -void func_80157544(void *a0) { - D_80180570[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80199978; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80199978 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80199978 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180598[])(void); -extern int D_80199978; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180598[*(unsigned short *)((char *)param_1 + 2)](); - D_80199978 = D_80199978 - 1; - if (D_80199978 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180578; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180578); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180588; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180588); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801805D8[])(void); - -void func_80157DC4(void *a0) { - D_801805D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801805E0[])(void); - -void func_80157FC4(void *a0) { - D_801805E0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801805AC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801805AC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801805EC[])(void); - -void func_8015824C(void *a0) { - D_801805EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801805BC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801805BC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80199980; -extern s32 D_8019998C; -extern s32 D_80199990; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80199980 = 0; - D_8019998C = 1; - D_80199990 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80199980; -extern s32 D_8019998C; -extern s32 D_80199990; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80199980 = 0; - D_8019998C = 1; - D_80199990 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180628[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180628[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80199980; - -void func_80158BB0(void *arg0) { - if (D_80199980 == 0) { - D_80199980 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019998C; -extern s32 D_801805FC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019998C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801805FC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80199990; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80199990 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80199980; -extern s32 D_80199988; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80199980 == 4) { - D_80199980 = 5; - } - if (D_80199988 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180664[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180664; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_801594E8); - - -extern void (*D_80180878[])(void); - -void func_80159698(void *a0) { - D_80180878[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180698)); - func_80028620(1, &(*(u8 *)&D_80180698) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180698) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018091C[])(void); - -void func_80159968(void *a0) { - D_8018091C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180A70[])(void); - -void func_80159B70(void *a0) { - D_80180A70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018088C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018088C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180A78[])(void); - -void func_8015A264(void *a0) { - D_80180A78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018089C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018089C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180928[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801808AC[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180928[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801808AC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180928[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801808BC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801808BC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801808BC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180A80[])(void); - -void func_8015AD3C(void *a0) { - D_80180A80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8015444C.c b/src/ov_SC05_000/ov_SC05_000_jr_8015444C.c new file mode 100644 index 000000000..01d65f5fe --- /dev/null +++ b/src/ov_SC05_000/ov_SC05_000_jr_8015444C.c @@ -0,0 +1,2184 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801807C4; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801807A0; +extern u8 D_8018077C; +extern u8 D_80180758; +extern u8 D_801806C8; +extern void func_80145934(void); +extern u8 D_80180854; +extern u8 D_80180830; +extern u8 D_8018080C; +extern u8 D_801807E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC4C[]; +extern unsigned char D_8017FC7C[]; +extern unsigned char D_8017FCCC[]; +extern unsigned char D_8017FCFC[]; +extern unsigned char D_8017FD2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FE44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FECC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FED4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199940; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80199944; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FF04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FFAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FFD0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FFC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180018[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180008; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018002C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180048[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180038; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018005C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180070[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180084; +extern void (*D_801800AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018008C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801800B8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801800B8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801800F8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801800F8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801800FC[])(void); + +void func_80155580(void *a0) { + D_801800FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801802F0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801802F0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180560 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180560[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180560[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180570[])(void); + +void func_80157544(void *a0) { + D_80180570[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80199978; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80199978 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80199978 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180598[])(void); +extern int D_80199978; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180598[*(unsigned short *)((char *)param_1 + 2)](); + D_80199978 = D_80199978 - 1; + if (D_80199978 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180578; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180578); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180588; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180588); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801805D8[])(void); + +void func_80157DC4(void *a0) { + D_801805D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801805E0[])(void); + +void func_80157FC4(void *a0) { + D_801805E0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801805AC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801805AC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801805EC[])(void); + +void func_8015824C(void *a0) { + D_801805EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801805BC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801805BC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80199980; +extern s32 D_8019998C; +extern s32 D_80199990; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80199980 = 0; + D_8019998C = 1; + D_80199990 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80199980; +extern s32 D_8019998C; +extern s32 D_80199990; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80199980 = 0; + D_8019998C = 1; + D_80199990 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180628[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180628[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80199980; + +void func_80158BB0(void *arg0) { + if (D_80199980 == 0) { + D_80199980 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019998C; +extern s32 D_801805FC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019998C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801805FC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80199990; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80199990 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80199980; +extern s32 D_80199988; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80199980 == 4) { + D_80199980 = 5; + } + if (D_80199988 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180664[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180664; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_801594E8); + + +extern void (*D_80180878[])(void); + +void func_80159698(void *a0) { + D_80180878[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180698)); + func_80028620(1, &(*(u8 *)&D_80180698) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180698) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018091C[])(void); + +void func_80159968(void *a0) { + D_8018091C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180A70[])(void); + +void func_80159B70(void *a0) { + D_80180A70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018088C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018088C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_000/nonmatchings/ov_SC05_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180A78[])(void); + +void func_8015A264(void *a0) { + D_80180A78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018089C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018089C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_000/ov_SC05_000_jr_8015A3C8.c b/src/ov_SC05_000/ov_SC05_000_jr_8015A3C8.c new file mode 100644 index 000000000..eb4021a07 --- /dev/null +++ b/src/ov_SC05_000/ov_SC05_000_jr_8015A3C8.c @@ -0,0 +1,1476 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801807C4; +extern u8 D_80180734; +extern u8 D_80180710; +extern u8 D_801806EC; +extern u8 D_801807A0; +extern u8 D_8018077C; +extern u8 D_80180758; +extern u8 D_801806C8; +extern void func_80145934(void); +extern u8 D_80180854; +extern u8 D_80180830; +extern u8 D_8018080C; +extern u8 D_801807E8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017FC4C[]; +extern unsigned char D_8017FC7C[]; +extern unsigned char D_8017FCCC[]; +extern unsigned char D_8017FCFC[]; +extern unsigned char D_8017FD2C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FD7C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FE44[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FECC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FED4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80199940; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80199944; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FF04; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FFAC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FFD0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FFC0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FFE4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FFF0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180018[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180008; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018002C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180048[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180038; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018005C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80180070[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180084; +extern void (*D_801800AC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018008C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801800F8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801800FC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180560[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180570[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199978; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180598[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180578; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180588; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801805D8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801805E0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801805AC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801805EC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801805BC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199980; +extern s32 D_8019998C; +extern s32 D_80199990; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180628[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801805FC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199988; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180878[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180698[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018091C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180A70[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018088C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180A78[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018089C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180928[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801808AC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180928[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801808AC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180928[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801808BC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801808BC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801808BC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180A80[])(void); + +void func_8015AD3C(void *a0) { + D_80180A80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_001/ov_SC05_001_after.c b/src/ov_SC05_001/ov_SC05_001_after.c index c1fa69060..38464185a 100644 --- a/src/ov_SC05_001/ov_SC05_001_after.c +++ b/src/ov_SC05_001/ov_SC05_001_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_001/nonmatchings/ov_SC05_001_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187894[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187894[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801878D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801878D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801878D8[])(void); - -void func_80155580(void *a0) { - D_801878D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187ACC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187ACC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187D3C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80187D3C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80187D3C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187D4C[])(void); - -void func_80157544(void *a0) { - D_80187D4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B4A38; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B4A38 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B4A38 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187D74[])(void); -extern int D_801B4A38; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187D74[*(unsigned short *)((char *)param_1 + 2)](); - D_801B4A38 = D_801B4A38 - 1; - if (D_801B4A38 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187D54; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187D54); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187D64; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187D64); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187DB4[])(void); - -void func_80157DC4(void *a0) { - D_80187DB4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187DBC[])(void); - -void func_80157FC4(void *a0) { - D_80187DBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187D88; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187D88); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187DC8[])(void); - -void func_8015824C(void *a0) { - D_80187DC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187D98; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187D98); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B4A40; -extern s32 D_801B4A4C; -extern s32 D_801B4A50; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B4A40 = 0; - D_801B4A4C = 1; - D_801B4A50 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B4A40; -extern s32 D_801B4A4C; -extern s32 D_801B4A50; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B4A40 = 0; - D_801B4A4C = 1; - D_801B4A50 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187E04[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187E04[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B4A40; - -void func_80158BB0(void *arg0) { - if (D_801B4A40 == 0) { - D_801B4A40 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B4A4C; -extern s32 D_80187DD8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B4A4C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187DD8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B4A50; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B4A50 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B4A40; -extern s32 D_801B4A48; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B4A40 == 4) { - D_801B4A40 = 5; - } - if (D_801B4A48 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187E40[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187E40; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_801594E8); - - -extern void (*D_80188054[])(void); - -void func_80159698(void *a0) { - D_80188054[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187E74)); - func_80028620(1, &(*(u8 *)&D_80187E74) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187E74) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801880F8[])(void); - -void func_80159968(void *a0) { - D_801880F8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018824C[])(void); - -void func_80159B70(void *a0) { - D_8018824C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188068; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188068); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188254[])(void); - -void func_8015A264(void *a0) { - D_80188254[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80188078; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188078); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188104[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 * D_80188088; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188104[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188088)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188104[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188098 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80188098; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80188098); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018825C[])(void); - -void func_8015AD3C(void *a0) { - D_8018825C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8015444C.c b/src/ov_SC05_001/ov_SC05_001_jr_8015444C.c new file mode 100644 index 000000000..8e58deb4c --- /dev/null +++ b/src/ov_SC05_001/ov_SC05_001_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187FA0; +extern u8 D_80187F10; +extern u8 D_80187EEC; +extern u8 D_80187EC8; +extern u8 D_80187F7C; +extern u8 D_80187F58; +extern u8 D_80187F34; +extern u8 D_80187EA4; +extern void func_80145934(void); +extern u8 D_80188030; +extern u8 D_8018800C; +extern u8 D_80187FE8; +extern u8 D_80187FC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187428[]; +extern unsigned char D_80187458[]; +extern unsigned char D_801874A8[]; +extern unsigned char D_801874D8[]; +extern unsigned char D_80187508[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187558[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187620[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801876A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801876B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4A00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4A04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801876E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187788[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801877AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018779C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801877C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801877CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801877DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801877F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801877E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187808[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187824[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187814; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187838[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018784C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187860; +extern void (*D_80187888[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187868; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187894[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187894[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801878D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801878D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801878D8[])(void); + +void func_80155580(void *a0) { + D_801878D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187ACC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187ACC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187D3C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80187D3C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80187D3C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187D4C[])(void); + +void func_80157544(void *a0) { + D_80187D4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B4A38; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B4A38 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B4A38 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187D74[])(void); +extern int D_801B4A38; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187D74[*(unsigned short *)((char *)param_1 + 2)](); + D_801B4A38 = D_801B4A38 - 1; + if (D_801B4A38 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187D54; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187D54); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187D64; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187D64); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187DB4[])(void); + +void func_80157DC4(void *a0) { + D_80187DB4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187DBC[])(void); + +void func_80157FC4(void *a0) { + D_80187DBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187D88; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187D88); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187DC8[])(void); + +void func_8015824C(void *a0) { + D_80187DC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187D98; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187D98); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B4A40; +extern s32 D_801B4A4C; +extern s32 D_801B4A50; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B4A40 = 0; + D_801B4A4C = 1; + D_801B4A50 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B4A40; +extern s32 D_801B4A4C; +extern s32 D_801B4A50; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B4A40 = 0; + D_801B4A4C = 1; + D_801B4A50 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187E04[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187E04[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B4A40; + +void func_80158BB0(void *arg0) { + if (D_801B4A40 == 0) { + D_801B4A40 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B4A4C; +extern s32 D_80187DD8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B4A4C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187DD8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B4A50; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B4A50 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B4A40; +extern s32 D_801B4A48; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B4A40 == 4) { + D_801B4A40 = 5; + } + if (D_801B4A48 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187E40[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187E40; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_801594E8); + + +extern void (*D_80188054[])(void); + +void func_80159698(void *a0) { + D_80188054[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187E74)); + func_80028620(1, &(*(u8 *)&D_80187E74) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187E74) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801880F8[])(void); + +void func_80159968(void *a0) { + D_801880F8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018824C[])(void); + +void func_80159B70(void *a0) { + D_8018824C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188068; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188068); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188254[])(void); + +void func_8015A264(void *a0) { + D_80188254[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80188078; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188078); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_001/ov_SC05_001_jr_8015A3C8.c b/src/ov_SC05_001/ov_SC05_001_jr_8015A3C8.c new file mode 100644 index 000000000..8ff72c196 --- /dev/null +++ b/src/ov_SC05_001/ov_SC05_001_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187FA0; +extern u8 D_80187F10; +extern u8 D_80187EEC; +extern u8 D_80187EC8; +extern u8 D_80187F7C; +extern u8 D_80187F58; +extern u8 D_80187F34; +extern u8 D_80187EA4; +extern void func_80145934(void); +extern u8 D_80188030; +extern u8 D_8018800C; +extern u8 D_80187FE8; +extern u8 D_80187FC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80187428[]; +extern unsigned char D_80187458[]; +extern unsigned char D_801874A8[]; +extern unsigned char D_801874D8[]; +extern unsigned char D_80187508[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187558[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80187620[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801876A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801876B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B4A00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B4A04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801876E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187788[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801877AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018779C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801877C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801877CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801877DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801877F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801877E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80187808[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80187824[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80187814; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80187838[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018784C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80187860; +extern void (*D_80187888[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187868; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801878D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801878D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187D3C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187D4C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B4A38; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187D74[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187D54; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187D64; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187DB4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187DBC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187D88; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187DC8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187D98; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B4A40; +extern s32 D_801B4A4C; +extern s32 D_801B4A50; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187E04[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187DD8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B4A48; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188054[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187E74[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801880F8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018824C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188068; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188254[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188078; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188104[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 * D_80188088; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188104[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188088)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188104[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188098 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188098; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80188098); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018825C[])(void); + +void func_8015AD3C(void *a0) { + D_8018825C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_002/ov_SC05_002_after.c b/src/ov_SC05_002/ov_SC05_002_after.c index 7159297a0..8f7ad1b73 100644 --- a/src/ov_SC05_002/ov_SC05_002_after.c +++ b/src/ov_SC05_002/ov_SC05_002_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_002/nonmatchings/ov_SC05_002_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80182054[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80182054[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80182094[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80182094[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80182098[])(void); - -void func_80155580(void *a0) { - D_80182098[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018228C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018228C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801824FC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801824FC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801824FC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018250C[])(void); - -void func_80157544(void *a0) { - D_8018250C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019ECD8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019ECD8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019ECD8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182534[])(void); -extern int D_8019ECD8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182534[*(unsigned short *)((char *)param_1 + 2)](); - D_8019ECD8 = D_8019ECD8 - 1; - if (D_8019ECD8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80182514; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182514); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80182524; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182524); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182574[])(void); - -void func_80157DC4(void *a0) { - D_80182574[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018257C[])(void); - -void func_80157FC4(void *a0) { - D_8018257C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182548; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182548); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80182588[])(void); - -void func_8015824C(void *a0) { - D_80182588[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182558; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182558); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019ECE0; -extern s32 D_8019ECEC; -extern s32 D_8019ECF0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019ECE0 = 0; - D_8019ECEC = 1; - D_8019ECF0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019ECE0; -extern s32 D_8019ECEC; -extern s32 D_8019ECF0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019ECE0 = 0; - D_8019ECEC = 1; - D_8019ECF0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801825C4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801825C4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019ECE0; - -void func_80158BB0(void *arg0) { - if (D_8019ECE0 == 0) { - D_8019ECE0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019ECEC; -extern s32 D_80182598[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019ECEC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182598[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019ECF0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019ECF0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019ECE0; -extern s32 D_8019ECE8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019ECE0 == 4) { - D_8019ECE0 = 5; - } - if (D_8019ECE8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182600[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182600; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_801594E8); - - -extern void (*D_80182814[])(void); - -void func_80159698(void *a0) { - D_80182814[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80182634)); - func_80028620(1, &(*(u8 *)&D_80182634) + 0x10); - func_80028620(2, &(*(u8 *)&D_80182634) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801828B8[])(void); - -void func_80159968(void *a0) { - D_801828B8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80182A0C[])(void); - -void func_80159B70(void *a0) { - D_80182A0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80182828; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182828); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80182A14[])(void); - -void func_8015A264(void *a0) { - D_80182A14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80182838; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182838); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801828C4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_80182848[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801828C4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182848)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801828C4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182858 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182858; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182858); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80182A1C[])(void); - -void func_8015AD3C(void *a0) { - D_80182A1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8015444C.c b/src/ov_SC05_002/ov_SC05_002_jr_8015444C.c new file mode 100644 index 000000000..cbb3d4f76 --- /dev/null +++ b/src/ov_SC05_002/ov_SC05_002_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182760; +extern u8 D_801826D0; +extern u8 D_801826AC; +extern u8 D_80182688; +extern u8 D_8018273C; +extern u8 D_80182718; +extern u8 D_801826F4; +extern u8 D_80182664; +extern void func_80145934(void); +extern u8 D_801827F0; +extern u8 D_801827CC; +extern u8 D_801827A8; +extern u8 D_80182784; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181BE8[]; +extern unsigned char D_80181C18[]; +extern unsigned char D_80181C68[]; +extern unsigned char D_80181C98[]; +extern unsigned char D_80181CC8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181D18[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181DE0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181E68[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181E70; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ECA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ECA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181EA0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181F48[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181F6C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181F5C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181F80[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181F8C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181F9C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181FB4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181FA4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181FC8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181FE4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181FD4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181FF8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018200C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182020; +extern void (*D_80182048[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182028; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80182054[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80182054[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80182094[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80182094[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80182098[])(void); + +void func_80155580(void *a0) { + D_80182098[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018228C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018228C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801824FC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801824FC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801824FC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018250C[])(void); + +void func_80157544(void *a0) { + D_8018250C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019ECD8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019ECD8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019ECD8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182534[])(void); +extern int D_8019ECD8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182534[*(unsigned short *)((char *)param_1 + 2)](); + D_8019ECD8 = D_8019ECD8 - 1; + if (D_8019ECD8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182514; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182514); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80182524; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182524); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182574[])(void); + +void func_80157DC4(void *a0) { + D_80182574[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018257C[])(void); + +void func_80157FC4(void *a0) { + D_8018257C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182548; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182548); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80182588[])(void); + +void func_8015824C(void *a0) { + D_80182588[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182558; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182558); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019ECE0; +extern s32 D_8019ECEC; +extern s32 D_8019ECF0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019ECE0 = 0; + D_8019ECEC = 1; + D_8019ECF0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019ECE0; +extern s32 D_8019ECEC; +extern s32 D_8019ECF0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019ECE0 = 0; + D_8019ECEC = 1; + D_8019ECF0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801825C4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801825C4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019ECE0; + +void func_80158BB0(void *arg0) { + if (D_8019ECE0 == 0) { + D_8019ECE0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019ECEC; +extern s32 D_80182598[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019ECEC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182598[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019ECF0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019ECF0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ECE0; +extern s32 D_8019ECE8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019ECE0 == 4) { + D_8019ECE0 = 5; + } + if (D_8019ECE8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182600[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182600; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_801594E8); + + +extern void (*D_80182814[])(void); + +void func_80159698(void *a0) { + D_80182814[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80182634)); + func_80028620(1, &(*(u8 *)&D_80182634) + 0x10); + func_80028620(2, &(*(u8 *)&D_80182634) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801828B8[])(void); + +void func_80159968(void *a0) { + D_801828B8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80182A0C[])(void); + +void func_80159B70(void *a0) { + D_80182A0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80182828; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182828); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_002/nonmatchings/ov_SC05_002_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80182A14[])(void); + +void func_8015A264(void *a0) { + D_80182A14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80182838; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182838); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_002/ov_SC05_002_jr_8015A3C8.c b/src/ov_SC05_002/ov_SC05_002_jr_8015A3C8.c new file mode 100644 index 000000000..5c60d68e3 --- /dev/null +++ b/src/ov_SC05_002/ov_SC05_002_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182760; +extern u8 D_801826D0; +extern u8 D_801826AC; +extern u8 D_80182688; +extern u8 D_8018273C; +extern u8 D_80182718; +extern u8 D_801826F4; +extern u8 D_80182664; +extern void func_80145934(void); +extern u8 D_801827F0; +extern u8 D_801827CC; +extern u8 D_801827A8; +extern u8 D_80182784; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181BE8[]; +extern unsigned char D_80181C18[]; +extern unsigned char D_80181C68[]; +extern unsigned char D_80181C98[]; +extern unsigned char D_80181CC8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181D18[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181DE0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181E68[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181E70; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019ECA0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019ECA4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181EA0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181F48[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181F6C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181F5C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181F80[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181F8C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181F9C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181FB4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181FA4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181FC8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181FE4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181FD4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181FF8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018200C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182020; +extern void (*D_80182048[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182028; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80182094[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80182098[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801824FC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018250C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019ECD8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182534[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182514; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182524; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182574[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018257C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182548; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182588[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182558; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019ECE0; +extern s32 D_8019ECEC; +extern s32 D_8019ECF0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801825C4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182598[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019ECE8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182814[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182634[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801828B8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182A0C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182828; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182A14[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182838; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801828C4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80182848[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801828C4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80182848)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801828C4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182858 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182858; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182858); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80182A1C[])(void); + +void func_8015AD3C(void *a0) { + D_80182A1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_003/ov_SC05_003_after.c b/src/ov_SC05_003/ov_SC05_003_after.c index 787120c65..ca1684941 100644 --- a/src/ov_SC05_003/ov_SC05_003_after.c +++ b/src/ov_SC05_003/ov_SC05_003_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_003/nonmatchings/ov_SC05_003_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018438C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018438C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801843CC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801843CC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801843D0[])(void); - -void func_80155580(void *a0) { - D_801843D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801845C4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801845C4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184834 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184834[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184834[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184844[])(void); - -void func_80157544(void *a0) { - D_80184844[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801AB7E8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801AB7E8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801AB7E8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018486C[])(void); -extern int D_801AB7E8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018486C[*(unsigned short *)((char *)param_1 + 2)](); - D_801AB7E8 = D_801AB7E8 - 1; - if (D_801AB7E8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018484C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018484C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018485C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018485C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801848AC[])(void); - -void func_80157DC4(void *a0) { - D_801848AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801848B4[])(void); - -void func_80157FC4(void *a0) { - D_801848B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184880; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184880); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801848C0[])(void); - -void func_8015824C(void *a0) { - D_801848C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184890; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184890); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801AB7F0; -extern s32 D_801AB7FC; -extern s32 D_801AB800; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801AB7F0 = 0; - D_801AB7FC = 1; - D_801AB800 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801AB7F0; -extern s32 D_801AB7FC; -extern s32 D_801AB800; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801AB7F0 = 0; - D_801AB7FC = 1; - D_801AB800 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801848FC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801848FC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801AB7F0; - -void func_80158BB0(void *arg0) { - if (D_801AB7F0 == 0) { - D_801AB7F0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801AB7FC; -extern s32 D_801848D0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801AB7FC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801848D0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801AB800; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801AB800 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801AB7F0; -extern s32 D_801AB7F8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801AB7F0 == 4) { - D_801AB7F0 = 5; - } - if (D_801AB7F8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184938[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184938; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_801594E8); - - -extern void (*D_80184B4C[])(void); - -void func_80159698(void *a0) { - D_80184B4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018496C)); - func_80028620(1, &(*(u8 *)&D_8018496C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018496C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184BF0[])(void); - -void func_80159968(void *a0) { - D_80184BF0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184D44[])(void); - -void func_80159B70(void *a0) { - D_80184D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184B60; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184B60); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184D4C[])(void); - -void func_8015A264(void *a0) { - D_80184D4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184B70; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184B70); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184BFC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80184B80; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184BFC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184B80)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184BFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184B90 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184B90; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184B90); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184D54[])(void); - -void func_8015AD3C(void *a0) { - D_80184D54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8015444C.c b/src/ov_SC05_003/ov_SC05_003_jr_8015444C.c new file mode 100644 index 000000000..7fa9b09f3 --- /dev/null +++ b/src/ov_SC05_003/ov_SC05_003_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184A98; +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_80184A74; +extern u8 D_80184A50; +extern u8 D_80184A2C; +extern u8 D_8018499C; +extern void func_80145934(void); +extern u8 D_80184B28; +extern u8 D_80184B04; +extern u8 D_80184AE0; +extern u8 D_80184ABC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183F20[]; +extern unsigned char D_80183F50[]; +extern unsigned char D_80183FA0[]; +extern unsigned char D_80183FD0[]; +extern unsigned char D_80184000[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184050[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184118[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801841A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801841A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AB7B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AB7B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801841D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184280[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801842A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184294; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801842B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801842C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801842D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801842EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801842DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184300[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018431C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018430C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184330[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184344[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184358; +extern void (*D_80184380[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184360; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018438C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018438C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801843CC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801843CC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801843D0[])(void); + +void func_80155580(void *a0) { + D_801843D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801845C4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801845C4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184834 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184834[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184834[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184844[])(void); + +void func_80157544(void *a0) { + D_80184844[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801AB7E8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801AB7E8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801AB7E8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018486C[])(void); +extern int D_801AB7E8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018486C[*(unsigned short *)((char *)param_1 + 2)](); + D_801AB7E8 = D_801AB7E8 - 1; + if (D_801AB7E8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018484C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018484C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018485C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018485C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801848AC[])(void); + +void func_80157DC4(void *a0) { + D_801848AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801848B4[])(void); + +void func_80157FC4(void *a0) { + D_801848B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184880; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184880); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801848C0[])(void); + +void func_8015824C(void *a0) { + D_801848C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184890; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184890); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801AB7F0; +extern s32 D_801AB7FC; +extern s32 D_801AB800; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801AB7F0 = 0; + D_801AB7FC = 1; + D_801AB800 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801AB7F0; +extern s32 D_801AB7FC; +extern s32 D_801AB800; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801AB7F0 = 0; + D_801AB7FC = 1; + D_801AB800 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801848FC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801848FC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801AB7F0; + +void func_80158BB0(void *arg0) { + if (D_801AB7F0 == 0) { + D_801AB7F0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801AB7FC; +extern s32 D_801848D0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801AB7FC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801848D0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801AB800; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801AB800 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801AB7F0; +extern s32 D_801AB7F8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801AB7F0 == 4) { + D_801AB7F0 = 5; + } + if (D_801AB7F8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184938[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184938; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_801594E8); + + +extern void (*D_80184B4C[])(void); + +void func_80159698(void *a0) { + D_80184B4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018496C)); + func_80028620(1, &(*(u8 *)&D_8018496C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018496C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184BF0[])(void); + +void func_80159968(void *a0) { + D_80184BF0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184D44[])(void); + +void func_80159B70(void *a0) { + D_80184D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184B60; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184B60); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_003/nonmatchings/ov_SC05_003_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184D4C[])(void); + +void func_8015A264(void *a0) { + D_80184D4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184B70; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184B70); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_003/ov_SC05_003_jr_8015A3C8.c b/src/ov_SC05_003/ov_SC05_003_jr_8015A3C8.c new file mode 100644 index 000000000..b55ecd9b3 --- /dev/null +++ b/src/ov_SC05_003/ov_SC05_003_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184A98; +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_80184A74; +extern u8 D_80184A50; +extern u8 D_80184A2C; +extern u8 D_8018499C; +extern void func_80145934(void); +extern u8 D_80184B28; +extern u8 D_80184B04; +extern u8 D_80184AE0; +extern u8 D_80184ABC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183F20[]; +extern unsigned char D_80183F50[]; +extern unsigned char D_80183FA0[]; +extern unsigned char D_80183FD0[]; +extern unsigned char D_80184000[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80184050[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184118[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801841A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801841A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AB7B0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AB7B4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801841D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184280[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801842A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184294; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801842B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801842C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801842D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801842EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801842DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184300[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018431C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018430C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184330[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184344[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184358; +extern void (*D_80184380[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184360; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801843CC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801843D0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184834[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184844[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AB7E8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018486C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018484C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018485C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801848AC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801848B4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184880; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801848C0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184890; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AB7F0; +extern s32 D_801AB7FC; +extern s32 D_801AB800; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801848FC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801848D0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AB7F8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184B4C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018496C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184BF0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184D44[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184B60; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184D4C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184B70; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184BFC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80184B80; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184BFC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184B80)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184BFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184B90 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184B90; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184B90); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184D54[])(void); + +void func_8015AD3C(void *a0) { + D_80184D54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_004/ov_SC05_004_after.c b/src/ov_SC05_004/ov_SC05_004_after.c index 4f241c9f2..96a502a69 100644 --- a/src/ov_SC05_004/ov_SC05_004_after.c +++ b/src/ov_SC05_004/ov_SC05_004_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_004/nonmatchings/ov_SC05_004_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183498[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183498[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801834D8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801834D8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801834DC[])(void); - -void func_80155580(void *a0) { - D_801834DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801836D0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801836D0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183940 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80183940[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80183940[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80183950[])(void); - -void func_80157544(void *a0) { - D_80183950[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019DE60; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019DE60 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019DE60 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80183978[])(void); -extern int D_8019DE60; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80183978[*(unsigned short *)((char *)param_1 + 2)](); - D_8019DE60 = D_8019DE60 - 1; - if (D_8019DE60 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80183958; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183958); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80183968; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183968); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801839B8[])(void); - -void func_80157DC4(void *a0) { - D_801839B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801839C0[])(void); - -void func_80157FC4(void *a0) { - D_801839C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018398C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018398C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801839CC[])(void); - -void func_8015824C(void *a0) { - D_801839CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018399C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018399C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019DE68; -extern s32 D_8019DE74; -extern s32 D_8019DE78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019DE68 = 0; - D_8019DE74 = 1; - D_8019DE78 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019DE68; -extern s32 D_8019DE74; -extern s32 D_8019DE78; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019DE68 = 0; - D_8019DE74 = 1; - D_8019DE78 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80183A08[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80183A08[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019DE68; - -void func_80158BB0(void *arg0) { - if (D_8019DE68 == 0) { - D_8019DE68 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019DE74; -extern s32 D_801839DC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019DE74; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801839DC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019DE78; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019DE78 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019DE68; -extern s32 D_8019DE70; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019DE68 == 4) { - D_8019DE68 = 5; - } - if (D_8019DE70 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80183A44[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80183A44; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_801594E8); - - -extern void (*D_80183C58[])(void); - -void func_80159698(void *a0) { - D_80183C58[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80183A78)); - func_80028620(1, &(*(u8 *)&D_80183A78) + 0x10); - func_80028620(2, &(*(u8 *)&D_80183A78) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80183CFC[])(void); - -void func_80159968(void *a0) { - D_80183CFC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183E50[])(void); - -void func_80159B70(void *a0) { - D_80183E50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80183C6C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183C6C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80183E58[])(void); - -void func_8015A264(void *a0) { - D_80183E58[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80183C7C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183C7C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80183D08[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_80183C8C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80183D08[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183C8C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80183D08[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183C9C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80183C9C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80183C9C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183E60[])(void); - -void func_8015AD3C(void *a0) { - D_80183E60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8015444C.c b/src/ov_SC05_004/ov_SC05_004_jr_8015444C.c new file mode 100644 index 000000000..5e952499b --- /dev/null +++ b/src/ov_SC05_004/ov_SC05_004_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183BA4; +extern u8 D_80183B14; +extern u8 D_80183AF0; +extern u8 D_80183ACC; +extern u8 D_80183B80; +extern u8 D_80183B5C; +extern u8 D_80183B38; +extern u8 D_80183AA8; +extern void func_80145934(void); +extern u8 D_80183C34; +extern u8 D_80183C10; +extern u8 D_80183BEC; +extern u8 D_80183BC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018302C[]; +extern unsigned char D_8018305C[]; +extern unsigned char D_801830AC[]; +extern unsigned char D_801830DC[]; +extern unsigned char D_8018310C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018315C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183224[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801832AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801832B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019DE28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019DE2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801832E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018338C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801833B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801833A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801833C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801833D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801833E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801833F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801833E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018340C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183428[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183418; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018343C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183450[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183464; +extern void (*D_8018348C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018346C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183498[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183498[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801834D8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801834D8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801834DC[])(void); + +void func_80155580(void *a0) { + D_801834DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801836D0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801836D0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183940 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80183940[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80183940[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80183950[])(void); + +void func_80157544(void *a0) { + D_80183950[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019DE60; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019DE60 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019DE60 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80183978[])(void); +extern int D_8019DE60; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80183978[*(unsigned short *)((char *)param_1 + 2)](); + D_8019DE60 = D_8019DE60 - 1; + if (D_8019DE60 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183958; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183958); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80183968; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183968); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801839B8[])(void); + +void func_80157DC4(void *a0) { + D_801839B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801839C0[])(void); + +void func_80157FC4(void *a0) { + D_801839C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018398C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018398C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801839CC[])(void); + +void func_8015824C(void *a0) { + D_801839CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018399C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018399C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019DE68; +extern s32 D_8019DE74; +extern s32 D_8019DE78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019DE68 = 0; + D_8019DE74 = 1; + D_8019DE78 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019DE68; +extern s32 D_8019DE74; +extern s32 D_8019DE78; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019DE68 = 0; + D_8019DE74 = 1; + D_8019DE78 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80183A08[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80183A08[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019DE68; + +void func_80158BB0(void *arg0) { + if (D_8019DE68 == 0) { + D_8019DE68 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019DE74; +extern s32 D_801839DC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019DE74; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801839DC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019DE78; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019DE78 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019DE68; +extern s32 D_8019DE70; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019DE68 == 4) { + D_8019DE68 = 5; + } + if (D_8019DE70 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80183A44[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80183A44; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_801594E8); + + +extern void (*D_80183C58[])(void); + +void func_80159698(void *a0) { + D_80183C58[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80183A78)); + func_80028620(1, &(*(u8 *)&D_80183A78) + 0x10); + func_80028620(2, &(*(u8 *)&D_80183A78) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80183CFC[])(void); + +void func_80159968(void *a0) { + D_80183CFC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183E50[])(void); + +void func_80159B70(void *a0) { + D_80183E50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80183C6C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183C6C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80183E58[])(void); + +void func_8015A264(void *a0) { + D_80183E58[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80183C7C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183C7C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_004/ov_SC05_004_jr_8015A3C8.c b/src/ov_SC05_004/ov_SC05_004_jr_8015A3C8.c new file mode 100644 index 000000000..0e5201269 --- /dev/null +++ b/src/ov_SC05_004/ov_SC05_004_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183BA4; +extern u8 D_80183B14; +extern u8 D_80183AF0; +extern u8 D_80183ACC; +extern u8 D_80183B80; +extern u8 D_80183B5C; +extern u8 D_80183B38; +extern u8 D_80183AA8; +extern void func_80145934(void); +extern u8 D_80183C34; +extern u8 D_80183C10; +extern u8 D_80183BEC; +extern u8 D_80183BC8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018302C[]; +extern unsigned char D_8018305C[]; +extern unsigned char D_801830AC[]; +extern unsigned char D_801830DC[]; +extern unsigned char D_8018310C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018315C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183224[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801832AC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801832B4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019DE28; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019DE2C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801832E4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018338C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801833B0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801833A0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801833C4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801833D0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801833E0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801833F8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801833E8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018340C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183428[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183418; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018343C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183450[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183464; +extern void (*D_8018348C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018346C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801834D8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801834DC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183940[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183950[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019DE60; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183978[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183958; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183968; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801839B8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801839C0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018398C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801839CC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018399C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019DE68; +extern s32 D_8019DE74; +extern s32 D_8019DE78; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80183A08[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801839DC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019DE70; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183C58[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183A78[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183CFC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183E50[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183C6C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183E58[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183C7C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183D08[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80183C8C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183D08[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183C8C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183D08[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183C9C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183C9C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80183C9C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183E60[])(void); + +void func_8015AD3C(void *a0) { + D_80183E60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_005/ov_SC05_005_after.c b/src/ov_SC05_005/ov_SC05_005_after.c index 1a66ec5d8..ba3be177e 100644 --- a/src/ov_SC05_005/ov_SC05_005_after.c +++ b/src/ov_SC05_005/ov_SC05_005_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_005/nonmatchings/ov_SC05_005_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018426C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018426C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801842AC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801842AC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801842B0[])(void); - -void func_80155580(void *a0) { - D_801842B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801844A4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801844A4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184714 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184714[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184714[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184724[])(void); - -void func_80157544(void *a0) { - D_80184724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B0AC8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B0AC8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B0AC8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018474C[])(void); -extern int D_801B0AC8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018474C[*(unsigned short *)((char *)param_1 + 2)](); - D_801B0AC8 = D_801B0AC8 - 1; - if (D_801B0AC8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018472C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018472C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018473C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018473C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018478C[])(void); - -void func_80157DC4(void *a0) { - D_8018478C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184794[])(void); - -void func_80157FC4(void *a0) { - D_80184794[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184760; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184760); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801847A0[])(void); - -void func_8015824C(void *a0) { - D_801847A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184770; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184770); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B0AD0; -extern s32 D_801B0ADC; -extern s32 D_801B0AE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B0AD0 = 0; - D_801B0ADC = 1; - D_801B0AE0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B0AD0; -extern s32 D_801B0ADC; -extern s32 D_801B0AE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B0AD0 = 0; - D_801B0ADC = 1; - D_801B0AE0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801847DC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801847DC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B0AD0; - -void func_80158BB0(void *arg0) { - if (D_801B0AD0 == 0) { - D_801B0AD0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B0ADC; -extern s32 D_801847B0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B0ADC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801847B0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B0AE0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B0AE0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B0AD0; -extern s32 D_801B0AD8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B0AD0 == 4) { - D_801B0AD0 = 5; - } - if (D_801B0AD8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184818[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184818; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_801594E8); - - -extern void (*D_80184A2C[])(void); - -void func_80159698(void *a0) { - D_80184A2C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018484C)); - func_80028620(1, &(*(u8 *)&D_8018484C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018484C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184AD0[])(void); - -void func_80159968(void *a0) { - D_80184AD0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184C24[])(void); - -void func_80159B70(void *a0) { - D_80184C24[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184A40; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184A40); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184C2C[])(void); - -void func_8015A264(void *a0) { - D_80184C2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184A50; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184A50); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184ADC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 * D_80184A60; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184ADC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184A60)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184ADC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184A70 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184A70; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184A70); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184C34[])(void); - -void func_8015AD3C(void *a0) { - D_80184C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8015444C.c b/src/ov_SC05_005/ov_SC05_005_jr_8015444C.c new file mode 100644 index 000000000..027024b50 --- /dev/null +++ b/src/ov_SC05_005/ov_SC05_005_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184978; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_8018487C; +extern void func_80145934(void); +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_8018499C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183E00[]; +extern unsigned char D_80183E30[]; +extern unsigned char D_80183E80[]; +extern unsigned char D_80183EB0[]; +extern unsigned char D_80183EE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183F30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183FF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184080[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184088; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0A90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0A94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801840B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184160[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184184[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184174; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184198[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801841A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801841B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801841CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801841BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801841E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801841FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801841EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184210[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184224[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184238; +extern void (*D_80184260[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184240; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018426C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018426C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801842AC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801842AC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801842B0[])(void); + +void func_80155580(void *a0) { + D_801842B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801844A4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801844A4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184714 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184714[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184714[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184724[])(void); + +void func_80157544(void *a0) { + D_80184724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B0AC8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B0AC8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B0AC8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018474C[])(void); +extern int D_801B0AC8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018474C[*(unsigned short *)((char *)param_1 + 2)](); + D_801B0AC8 = D_801B0AC8 - 1; + if (D_801B0AC8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018472C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018472C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018473C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018473C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018478C[])(void); + +void func_80157DC4(void *a0) { + D_8018478C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184794[])(void); + +void func_80157FC4(void *a0) { + D_80184794[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184760; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184760); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801847A0[])(void); + +void func_8015824C(void *a0) { + D_801847A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184770; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184770); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B0AD0; +extern s32 D_801B0ADC; +extern s32 D_801B0AE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B0AD0 = 0; + D_801B0ADC = 1; + D_801B0AE0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B0AD0; +extern s32 D_801B0ADC; +extern s32 D_801B0AE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B0AD0 = 0; + D_801B0ADC = 1; + D_801B0AE0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801847DC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801847DC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B0AD0; + +void func_80158BB0(void *arg0) { + if (D_801B0AD0 == 0) { + D_801B0AD0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B0ADC; +extern s32 D_801847B0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B0ADC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801847B0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B0AE0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B0AE0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0AD0; +extern s32 D_801B0AD8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B0AD0 == 4) { + D_801B0AD0 = 5; + } + if (D_801B0AD8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184818[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184818; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_801594E8); + + +extern void (*D_80184A2C[])(void); + +void func_80159698(void *a0) { + D_80184A2C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018484C)); + func_80028620(1, &(*(u8 *)&D_8018484C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018484C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184AD0[])(void); + +void func_80159968(void *a0) { + D_80184AD0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184C24[])(void); + +void func_80159B70(void *a0) { + D_80184C24[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184A40; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184A40); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184C2C[])(void); + +void func_8015A264(void *a0) { + D_80184C2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184A50; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184A50); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_005/ov_SC05_005_jr_8015A3C8.c b/src/ov_SC05_005/ov_SC05_005_jr_8015A3C8.c new file mode 100644 index 000000000..e80173fcc --- /dev/null +++ b/src/ov_SC05_005/ov_SC05_005_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184978; +extern u8 D_801848E8; +extern u8 D_801848C4; +extern u8 D_801848A0; +extern u8 D_80184954; +extern u8 D_80184930; +extern u8 D_8018490C; +extern u8 D_8018487C; +extern void func_80145934(void); +extern u8 D_80184A08; +extern u8 D_801849E4; +extern u8 D_801849C0; +extern u8 D_8018499C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183E00[]; +extern unsigned char D_80183E30[]; +extern unsigned char D_80183E80[]; +extern unsigned char D_80183EB0[]; +extern unsigned char D_80183EE0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183F30[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183FF8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80184080[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80184088; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0A90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0A94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801840B8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80184160[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80184184[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80184174; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80184198[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801841A4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801841B4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801841CC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801841BC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801841E0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801841FC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801841EC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184210[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184224[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184238; +extern void (*D_80184260[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80184240; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801842AC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801842B0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184714[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184724[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0AC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018474C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018472C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018473C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018478C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184794[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184760; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801847A0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184770; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0AD0; +extern s32 D_801B0ADC; +extern s32 D_801B0AE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801847DC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801847B0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0AD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184A2C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018484C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184AD0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184C24[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184A40; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184C2C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184A50; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184ADC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 * D_80184A60; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184ADC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184A60)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184ADC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184A70 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184A70; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184A70); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184C34[])(void); + +void func_8015AD3C(void *a0) { + D_80184C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_006/ov_SC05_006_after.c b/src/ov_SC05_006/ov_SC05_006_after.c index 43c362177..05895f9ee 100644 --- a/src/ov_SC05_006/ov_SC05_006_after.c +++ b/src/ov_SC05_006/ov_SC05_006_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_006/nonmatchings/ov_SC05_006_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018128C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018128C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801812CC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801812CC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801812D0[])(void); - -void func_80155580(void *a0) { - D_801812D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801814C4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801814C4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181734 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80181734[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80181734[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80181744[])(void); - -void func_80157544(void *a0) { - D_80181744[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018EC00; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018EC00 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018EC00 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018176C[])(void); -extern int D_8018EC00; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018176C[*(unsigned short *)((char *)param_1 + 2)](); - D_8018EC00 = D_8018EC00 - 1; - if (D_8018EC00 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018174C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018174C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018175C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018175C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801817AC[])(void); - -void func_80157DC4(void *a0) { - D_801817AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801817B4[])(void); - -void func_80157FC4(void *a0) { - D_801817B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181780; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181780); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801817C0[])(void); - -void func_8015824C(void *a0) { - D_801817C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80181790; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181790); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018EC08; -extern s32 D_8018EC14; -extern s32 D_8018EC18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018EC08 = 0; - D_8018EC14 = 1; - D_8018EC18 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018EC08; -extern s32 D_8018EC14; -extern s32 D_8018EC18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018EC08 = 0; - D_8018EC14 = 1; - D_8018EC18 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801817FC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801817FC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018EC08; - -void func_80158BB0(void *arg0) { - if (D_8018EC08 == 0) { - D_8018EC08 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018EC14; -extern s32 D_801817D0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018EC14; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801817D0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018EC18; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018EC18 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018EC08; -extern s32 D_8018EC10; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018EC08 == 4) { - D_8018EC08 = 5; - } - if (D_8018EC10 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181838[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181838; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_801594E8); - - -extern void (*D_80181A4C[])(void); - -void func_80159698(void *a0) { - D_80181A4C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018186C)); - func_80028620(1, &(*(u8 *)&D_8018186C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018186C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181AF0[])(void); - -void func_80159968(void *a0) { - D_80181AF0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181C44[])(void); - -void func_80159B70(void *a0) { - D_80181C44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181A60; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181A60); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181C4C[])(void); - -void func_8015A264(void *a0) { - D_80181C4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181A70; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181A70); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181AFC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80181A80; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181AFC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181A80); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181AFC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181A90 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80181A90; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80181A90); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181C54[])(void); - -void func_8015AD3C(void *a0) { - D_80181C54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8015444C.c b/src/ov_SC05_006/ov_SC05_006_jr_8015444C.c new file mode 100644 index 000000000..3b82728f0 --- /dev/null +++ b/src/ov_SC05_006/ov_SC05_006_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181998; +extern u8 D_80181908; +extern u8 D_801818E4; +extern u8 D_801818C0; +extern u8 D_80181974; +extern u8 D_80181950; +extern u8 D_8018192C; +extern u8 D_8018189C; +extern void func_80145934(void); +extern u8 D_80181A28; +extern u8 D_80181A04; +extern u8 D_801819E0; +extern u8 D_801819BC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180E20[]; +extern unsigned char D_80180E50[]; +extern unsigned char D_80180EA0[]; +extern unsigned char D_80180ED0[]; +extern unsigned char D_80180F00[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180F50[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181018[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801810A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801810A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EBC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EBCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801810D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181180[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801811A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181194; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801811B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801811C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801811D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801811EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801811DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181200[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018121C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018120C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181230[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181244[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181258; +extern void (*D_80181280[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181260; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018128C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018128C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801812CC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801812CC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801812D0[])(void); + +void func_80155580(void *a0) { + D_801812D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801814C4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801814C4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80181734 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80181734[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80181734[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80181744[])(void); + +void func_80157544(void *a0) { + D_80181744[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018EC00; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018EC00 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018EC00 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018176C[])(void); +extern int D_8018EC00; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018176C[*(unsigned short *)((char *)param_1 + 2)](); + D_8018EC00 = D_8018EC00 - 1; + if (D_8018EC00 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018174C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018174C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018175C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018175C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801817AC[])(void); + +void func_80157DC4(void *a0) { + D_801817AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801817B4[])(void); + +void func_80157FC4(void *a0) { + D_801817B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181780; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181780); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801817C0[])(void); + +void func_8015824C(void *a0) { + D_801817C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80181790; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80181790); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018EC08; +extern s32 D_8018EC14; +extern s32 D_8018EC18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018EC08 = 0; + D_8018EC14 = 1; + D_8018EC18 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018EC08; +extern s32 D_8018EC14; +extern s32 D_8018EC18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018EC08 = 0; + D_8018EC14 = 1; + D_8018EC18 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801817FC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801817FC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018EC08; + +void func_80158BB0(void *arg0) { + if (D_8018EC08 == 0) { + D_8018EC08 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018EC14; +extern s32 D_801817D0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018EC14; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801817D0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018EC18; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018EC18 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EC08; +extern s32 D_8018EC10; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018EC08 == 4) { + D_8018EC08 = 5; + } + if (D_8018EC10 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181838[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181838; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_801594E8); + + +extern void (*D_80181A4C[])(void); + +void func_80159698(void *a0) { + D_80181A4C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018186C)); + func_80028620(1, &(*(u8 *)&D_8018186C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018186C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181AF0[])(void); + +void func_80159968(void *a0) { + D_80181AF0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181C44[])(void); + +void func_80159B70(void *a0) { + D_80181C44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181A60; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181A60); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_006/nonmatchings/ov_SC05_006_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181C4C[])(void); + +void func_8015A264(void *a0) { + D_80181C4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181A70; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181A70); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_006/ov_SC05_006_jr_8015A3C8.c b/src/ov_SC05_006/ov_SC05_006_jr_8015A3C8.c new file mode 100644 index 000000000..0f4e10b2e --- /dev/null +++ b/src/ov_SC05_006/ov_SC05_006_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181998; +extern u8 D_80181908; +extern u8 D_801818E4; +extern u8 D_801818C0; +extern u8 D_80181974; +extern u8 D_80181950; +extern u8 D_8018192C; +extern u8 D_8018189C; +extern void func_80145934(void); +extern u8 D_80181A28; +extern u8 D_80181A04; +extern u8 D_801819E0; +extern u8 D_801819BC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180E20[]; +extern unsigned char D_80180E50[]; +extern unsigned char D_80180EA0[]; +extern unsigned char D_80180ED0[]; +extern unsigned char D_80180F00[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180F50[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181018[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801810A0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801810A8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018EBC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018EBCC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801810D8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181180[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801811A4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181194; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801811B8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801811C4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801811D4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801811EC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801811DC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181200[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018121C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018120C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181230[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181244[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181258; +extern void (*D_80181280[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181260; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801812CC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801812D0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80181734[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80181744[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018EC00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018176C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018174C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018175C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801817AC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801817B4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181780; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801817C0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80181790; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018EC08; +extern s32 D_8018EC14; +extern s32 D_8018EC18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801817FC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801817D0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018EC10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181A4C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018186C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181AF0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181C44[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181A60; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181C4C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181A70; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181AFC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80181A80; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181AFC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80181A80); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181AFC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80181A90 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80181A90; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80181A90); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181C54[])(void); + +void func_8015AD3C(void *a0) { + D_80181C54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_007/ov_SC05_007_after.c b/src/ov_SC05_007/ov_SC05_007_after.c index a45495a36..ee655aa54 100644 --- a/src/ov_SC05_007/ov_SC05_007_after.c +++ b/src/ov_SC05_007/ov_SC05_007_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_007/nonmatchings/ov_SC05_007_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80182888[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80182888[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801828C8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801828C8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801828CC[])(void); - -void func_80155580(void *a0) { - D_801828CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80182AC0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80182AC0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182D30 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182D30[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182D30[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182D40[])(void); - -void func_80157544(void *a0) { - D_80182D40[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019BBE0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019BBE0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019BBE0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80182D68[])(void); -extern int D_8019BBE0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80182D68[*(unsigned short *)((char *)param_1 + 2)](); - D_8019BBE0 = D_8019BBE0 - 1; - if (D_8019BBE0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80182D48; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182D48); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80182D58; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182D58); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80182DA8[])(void); - -void func_80157DC4(void *a0) { - D_80182DA8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182DB0[])(void); - -void func_80157FC4(void *a0) { - D_80182DB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182D7C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182D7C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80182DBC[])(void); - -void func_8015824C(void *a0) { - D_80182DBC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182D8C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182D8C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019BBE8; -extern s32 D_8019BBF4; -extern s32 D_8019BBF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019BBE8 = 0; - D_8019BBF4 = 1; - D_8019BBF8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019BBE8; -extern s32 D_8019BBF4; -extern s32 D_8019BBF8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019BBE8 = 0; - D_8019BBF4 = 1; - D_8019BBF8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80182DF8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80182DF8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019BBE8; - -void func_80158BB0(void *arg0) { - if (D_8019BBE8 == 0) { - D_8019BBE8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019BBF4; -extern s32 D_80182DCC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019BBF4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182DCC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019BBF8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019BBF8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019BBE8; -extern s32 D_8019BBF0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019BBE8 == 4) { - D_8019BBE8 = 5; - } - if (D_8019BBF0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182E34[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182E34; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_801594E8); - - -extern void (*D_80183048[])(void); - -void func_80159698(void *a0) { - D_80183048[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80182E68)); - func_80028620(1, &(*(u8 *)&D_80182E68) + 0x10); - func_80028620(2, &(*(u8 *)&D_80182E68) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801830EC[])(void); - -void func_80159968(void *a0) { - D_801830EC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183240[])(void); - -void func_80159B70(void *a0) { - D_80183240[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018305C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018305C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80183248[])(void); - -void func_8015A264(void *a0) { - D_80183248[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018306C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018306C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801830F8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018307C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801830F8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018307C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801830F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018308C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018308C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018308C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183250[])(void); - -void func_8015AD3C(void *a0) { - D_80183250[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8015444C.c b/src/ov_SC05_007/ov_SC05_007_jr_8015444C.c new file mode 100644 index 000000000..aa6428a9a --- /dev/null +++ b/src/ov_SC05_007/ov_SC05_007_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182F94; +extern u8 D_80182F04; +extern u8 D_80182EE0; +extern u8 D_80182EBC; +extern u8 D_80182F70; +extern u8 D_80182F4C; +extern u8 D_80182F28; +extern u8 D_80182E98; +extern void func_80145934(void); +extern u8 D_80183024; +extern u8 D_80183000; +extern u8 D_80182FDC; +extern u8 D_80182FB8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018241C[]; +extern unsigned char D_8018244C[]; +extern unsigned char D_8018249C[]; +extern unsigned char D_801824CC[]; +extern unsigned char D_801824FC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018254C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182614[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018269C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826A4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BBA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BBAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801826D4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018277C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827A0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182790; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801827B4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801827C0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801827D0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801827E8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801827D8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801827FC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182818[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182808; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018282C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182840[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182854; +extern void (*D_8018287C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018285C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80182888[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80182888[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801828C8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801828C8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801828CC[])(void); + +void func_80155580(void *a0) { + D_801828CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80182AC0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80182AC0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182D30 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D30[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182D30[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182D40[])(void); + +void func_80157544(void *a0) { + D_80182D40[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019BBE0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019BBE0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019BBE0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80182D68[])(void); +extern int D_8019BBE0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80182D68[*(unsigned short *)((char *)param_1 + 2)](); + D_8019BBE0 = D_8019BBE0 - 1; + if (D_8019BBE0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182D48; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80182D48); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80182D58; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80182D58); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80182DA8[])(void); + +void func_80157DC4(void *a0) { + D_80182DA8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182DB0[])(void); + +void func_80157FC4(void *a0) { + D_80182DB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182D7C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182D7C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80182DBC[])(void); + +void func_8015824C(void *a0) { + D_80182DBC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182D8C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182D8C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019BBE8; +extern s32 D_8019BBF4; +extern s32 D_8019BBF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019BBE8 = 0; + D_8019BBF4 = 1; + D_8019BBF8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019BBE8; +extern s32 D_8019BBF4; +extern s32 D_8019BBF8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019BBE8 = 0; + D_8019BBF4 = 1; + D_8019BBF8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80182DF8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80182DF8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019BBE8; + +void func_80158BB0(void *arg0) { + if (D_8019BBE8 == 0) { + D_8019BBE8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019BBF4; +extern s32 D_80182DCC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019BBF4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80182DCC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019BBF8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019BBF8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BBE8; +extern s32 D_8019BBF0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019BBE8 == 4) { + D_8019BBE8 = 5; + } + if (D_8019BBF0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182E34[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182E34; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_801594E8); + + +extern void (*D_80183048[])(void); + +void func_80159698(void *a0) { + D_80183048[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80182E68)); + func_80028620(1, &(*(u8 *)&D_80182E68) + 0x10); + func_80028620(2, &(*(u8 *)&D_80182E68) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801830EC[])(void); + +void func_80159968(void *a0) { + D_801830EC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183240[])(void); + +void func_80159B70(void *a0) { + D_80183240[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018305C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018305C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_007/nonmatchings/ov_SC05_007_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80183248[])(void); + +void func_8015A264(void *a0) { + D_80183248[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018306C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018306C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_007/ov_SC05_007_jr_8015A3C8.c b/src/ov_SC05_007/ov_SC05_007_jr_8015A3C8.c new file mode 100644 index 000000000..2872e1fa8 --- /dev/null +++ b/src/ov_SC05_007/ov_SC05_007_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182F94; +extern u8 D_80182F04; +extern u8 D_80182EE0; +extern u8 D_80182EBC; +extern u8 D_80182F70; +extern u8 D_80182F4C; +extern u8 D_80182F28; +extern u8 D_80182E98; +extern void func_80145934(void); +extern u8 D_80183024; +extern u8 D_80183000; +extern u8 D_80182FDC; +extern u8 D_80182FB8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018241C[]; +extern unsigned char D_8018244C[]; +extern unsigned char D_8018249C[]; +extern unsigned char D_801824CC[]; +extern unsigned char D_801824FC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018254C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182614[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018269C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801826A4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BBA8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BBAC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801826D4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018277C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801827A0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182790; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801827B4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801827C0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801827D0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801827E8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801827D8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801827FC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80182818[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80182808; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018282C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182840[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182854; +extern void (*D_8018287C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018285C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801828C8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801828CC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182D30[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182D40[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019BBE0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80182D68[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80182D48; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80182D58; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80182DA8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182DB0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182D7C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182DBC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182D8C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019BBE8; +extern s32 D_8019BBF4; +extern s32 D_8019BBF8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80182DF8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80182DCC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BBF0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183048[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80182E68[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801830EC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183240[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018305C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183248[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018306C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801830F8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018307C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801830F8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018307C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801830F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018308C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018308C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018308C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183250[])(void); + +void func_8015AD3C(void *a0) { + D_80183250[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_008/ov_SC05_008_after.c b/src/ov_SC05_008/ov_SC05_008_after.c index f6ef9be1f..b8989f93f 100644 --- a/src/ov_SC05_008/ov_SC05_008_after.c +++ b/src/ov_SC05_008/ov_SC05_008_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_008/nonmatchings/ov_SC05_008_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801847E0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801847E0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80184820[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80184820[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80184824[])(void); - -void func_80155580(void *a0) { - D_80184824[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80184A18[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80184A18[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184C88 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184C88[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184C88[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184C98[])(void); - -void func_80157544(void *a0) { - D_80184C98[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019FF10; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019FF10 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019FF10 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184CC0[])(void); -extern int D_8019FF10; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184CC0[*(unsigned short *)((char *)param_1 + 2)](); - D_8019FF10 = D_8019FF10 - 1; - if (D_8019FF10 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184CA0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184CA0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184CB0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184CB0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80184D00[])(void); - -void func_80157DC4(void *a0) { - D_80184D00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184D08[])(void); - -void func_80157FC4(void *a0) { - D_80184D08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184CD4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184CD4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80184D14[])(void); - -void func_8015824C(void *a0) { - D_80184D14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184CE4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184CE4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019FF18; -extern s32 D_8019FF24; -extern s32 D_8019FF28; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019FF18 = 0; - D_8019FF24 = 1; - D_8019FF28 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019FF18; -extern s32 D_8019FF24; -extern s32 D_8019FF28; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019FF18 = 0; - D_8019FF24 = 1; - D_8019FF28 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184D50[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184D50[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019FF18; - -void func_80158BB0(void *arg0) { - if (D_8019FF18 == 0) { - D_8019FF18 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019FF24; -extern s32 D_80184D24[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019FF24; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184D24[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019FF28; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019FF28 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019FF18; -extern s32 D_8019FF20; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019FF18 == 4) { - D_8019FF18 = 5; - } - if (D_8019FF20 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184D8C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184D8C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_801594E8); - - -extern void (*D_80184FA0[])(void); - -void func_80159698(void *a0) { - D_80184FA0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184DC0)); - func_80028620(1, &(*(u8 *)&D_80184DC0) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184DC0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80185044[])(void); - -void func_80159968(void *a0) { - D_80185044[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80185198[])(void); - -void func_80159B70(void *a0) { - D_80185198[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184FB4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184FB4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801851A0[])(void); - -void func_8015A264(void *a0) { - D_801851A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184FC4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184FC4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80185050[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned short D_80184FD4[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80185050[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184FD4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80185050[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184FE4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184FE4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184FE4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801851A8[])(void); - -void func_8015AD3C(void *a0) { - D_801851A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8015444C.c b/src/ov_SC05_008/ov_SC05_008_jr_8015444C.c new file mode 100644 index 000000000..2b2487517 --- /dev/null +++ b/src/ov_SC05_008/ov_SC05_008_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EEC; +extern u8 D_80184E5C; +extern u8 D_80184E38; +extern u8 D_80184E14; +extern u8 D_80184EC8; +extern u8 D_80184EA4; +extern u8 D_80184E80; +extern u8 D_80184DF0; +extern void func_80145934(void); +extern u8 D_80184F7C; +extern u8 D_80184F58; +extern u8 D_80184F34; +extern u8 D_80184F10; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184374[]; +extern unsigned char D_801843A4[]; +extern unsigned char D_801843F4[]; +extern unsigned char D_80184424[]; +extern unsigned char D_80184454[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801844A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018456C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FED8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FEDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018462C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801846D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018470C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184718[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184728[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184740[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184730; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184754[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184770[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184760; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184784[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184798[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801847AC; +extern void (*D_801847D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801847B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801847E0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801847E0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80184820[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80184820[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80184824[])(void); + +void func_80155580(void *a0) { + D_80184824[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80184A18[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80184A18[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184C88 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C88[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184C88[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184C98[])(void); + +void func_80157544(void *a0) { + D_80184C98[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019FF10; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019FF10 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019FF10 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184CC0[])(void); +extern int D_8019FF10; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184CC0[*(unsigned short *)((char *)param_1 + 2)](); + D_8019FF10 = D_8019FF10 - 1; + if (D_8019FF10 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184CA0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184CA0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184CB0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184CB0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80184D00[])(void); + +void func_80157DC4(void *a0) { + D_80184D00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184D08[])(void); + +void func_80157FC4(void *a0) { + D_80184D08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184CD4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184CD4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80184D14[])(void); + +void func_8015824C(void *a0) { + D_80184D14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184CE4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184CE4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019FF18; +extern s32 D_8019FF24; +extern s32 D_8019FF28; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019FF18 = 0; + D_8019FF24 = 1; + D_8019FF28 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019FF18; +extern s32 D_8019FF24; +extern s32 D_8019FF28; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019FF18 = 0; + D_8019FF24 = 1; + D_8019FF28 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184D50[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184D50[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019FF18; + +void func_80158BB0(void *arg0) { + if (D_8019FF18 == 0) { + D_8019FF18 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019FF24; +extern s32 D_80184D24[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019FF24; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80184D24[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019FF28; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019FF28 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FF18; +extern s32 D_8019FF20; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019FF18 == 4) { + D_8019FF18 = 5; + } + if (D_8019FF20 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184D8C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184D8C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_801594E8); + + +extern void (*D_80184FA0[])(void); + +void func_80159698(void *a0) { + D_80184FA0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184DC0)); + func_80028620(1, &(*(u8 *)&D_80184DC0) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184DC0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80185044[])(void); + +void func_80159968(void *a0) { + D_80185044[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80185198[])(void); + +void func_80159B70(void *a0) { + D_80185198[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184FB4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184FB4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801851A0[])(void); + +void func_8015A264(void *a0) { + D_801851A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184FC4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184FC4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8015A3C8.c b/src/ov_SC05_008/ov_SC05_008_jr_8015A3C8.c new file mode 100644 index 000000000..ed3e6bcf4 --- /dev/null +++ b/src/ov_SC05_008/ov_SC05_008_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184EEC; +extern u8 D_80184E5C; +extern u8 D_80184E38; +extern u8 D_80184E14; +extern u8 D_80184EC8; +extern u8 D_80184EA4; +extern u8 D_80184E80; +extern u8 D_80184DF0; +extern void func_80145934(void); +extern u8 D_80184F7C; +extern u8 D_80184F58; +extern u8 D_80184F34; +extern u8 D_80184F10; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80184374[]; +extern unsigned char D_801843A4[]; +extern unsigned char D_801843F4[]; +extern unsigned char D_80184424[]; +extern unsigned char D_80184454[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801844A4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018456C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801845F4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801845FC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019FED8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019FEDC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018462C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801846D4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801846F8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801846E8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018470C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80184718[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80184728[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184740[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80184730; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80184754[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184770[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184760; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80184784[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184798[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801847AC; +extern void (*D_801847D4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801847B4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80184820[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80184824[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184C88[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184C98[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019FF10; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184CC0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184CA0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184CB0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80184D00[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184D08[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184CD4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80184D14[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184CE4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019FF18; +extern s32 D_8019FF24; +extern s32 D_8019FF28; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184D50[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80184D24[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019FF20; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184FA0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184DC0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80185044[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80185198[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184FB4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801851A0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184FC4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80185050[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned short D_80184FD4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80185050[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184FD4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80185050[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184FE4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184FE4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184FE4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801851A8[])(void); + +void func_8015AD3C(void *a0) { + D_801851A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_009/ov_SC05_009_after.c b/src/ov_SC05_009/ov_SC05_009_after.c index 00df62855..b3dda9bae 100644 --- a/src/ov_SC05_009/ov_SC05_009_after.c +++ b/src/ov_SC05_009/ov_SC05_009_after.c @@ -2617,7 +2617,310 @@ DEFINE_func_80154358() /* dedup: shared engine-core @0x80154358 (src/shared) */ DEFINE_func_80154418() /* dedup: shared engine-core @0x80154418 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_after", func_8015444C); +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + INCLUDE_ASM("asm/ov_SC05_009/nonmatchings/ov_SC05_009_after", func_801549F8); diff --git a/src/ov_SC05_010/ov_SC05_010_after.c b/src/ov_SC05_010/ov_SC05_010_after.c index 054508c0e..200e7cf28 100644 --- a/src/ov_SC05_010/ov_SC05_010_after.c +++ b/src/ov_SC05_010/ov_SC05_010_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_010/nonmatchings/ov_SC05_010_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018A7CC[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018A7CC[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018A80C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018A80C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018A810[])(void); - -void func_80155580(void *a0) { - D_8018A810[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018AA04[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018AA04[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018AC74 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018AC74[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018AC74[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018AC84[])(void); - -void func_80157544(void *a0) { - D_8018AC84[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801C5D70; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801C5D70 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801C5D70 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018ACAC[])(void); -extern int D_801C5D70; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018ACAC[*(unsigned short *)((char *)param_1 + 2)](); - D_801C5D70 = D_801C5D70 - 1; - if (D_801C5D70 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018AC8C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018AC8C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018AC9C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018AC9C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018ACEC[])(void); - -void func_80157DC4(void *a0) { - D_8018ACEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018ACF4[])(void); - -void func_80157FC4(void *a0) { - D_8018ACF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018ACC0; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018ACC0); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018AD00[])(void); - -void func_8015824C(void *a0) { - D_8018AD00[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018ACD0; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018ACD0); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801C5D78; -extern s32 D_801C5D84; -extern s32 D_801C5D88; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801C5D78 = 0; - D_801C5D84 = 1; - D_801C5D88 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801C5D78; -extern s32 D_801C5D84; -extern s32 D_801C5D88; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801C5D78 = 0; - D_801C5D84 = 1; - D_801C5D88 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018AD3C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018AD3C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801C5D78; - -void func_80158BB0(void *arg0) { - if (D_801C5D78 == 0) { - D_801C5D78 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801C5D84; -extern s32 D_8018AD10[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801C5D84; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018AD10[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801C5D88; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801C5D88 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801C5D78; -extern s32 D_801C5D80; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801C5D78 == 4) { - D_801C5D78 = 5; - } - if (D_801C5D80 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018AD78[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018AD78; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_801594E8); - - -extern void (*D_8018AF8C[])(void); - -void func_80159698(void *a0) { - D_8018AF8C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018ADAC)); - func_80028620(1, &(*(u8 *)&D_8018ADAC) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018ADAC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018B030[])(void); - -void func_80159968(void *a0) { - D_8018B030[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018B184[])(void); - -void func_80159B70(void *a0) { - D_8018B184[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018AFA0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018AFA0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018B18C[])(void); - -void func_8015A264(void *a0) { - D_8018B18C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018AFB0; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018AFB0); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018B03C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018AFC0; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018B03C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AFC0); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018B03C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018AFD0 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018AFD0; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018AFD0); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018B194[])(void); - -void func_8015AD3C(void *a0) { - D_8018B194[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8015444C.c b/src/ov_SC05_010/ov_SC05_010_jr_8015444C.c new file mode 100644 index 000000000..fedff46da --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018AED8; +extern u8 D_8018AE48; +extern u8 D_8018AE24; +extern u8 D_8018AE00; +extern u8 D_8018AEB4; +extern u8 D_8018AE90; +extern u8 D_8018AE6C; +extern u8 D_8018ADDC; +extern void func_80145934(void); +extern u8 D_8018AF68; +extern u8 D_8018AF44; +extern u8 D_8018AF20; +extern u8 D_8018AEFC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018A360[]; +extern unsigned char D_8018A390[]; +extern unsigned char D_8018A3E0[]; +extern unsigned char D_8018A410[]; +extern unsigned char D_8018A440[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018A490[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018A558[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A5E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A5E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C5D38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C5D3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A618; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A6C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A6E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A6D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A6F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A704[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A714[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A72C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A71C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A740[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A75C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A74C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A770[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A784[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A798; +extern void (*D_8018A7C0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A7A0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018A7CC[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018A7CC[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018A80C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018A80C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018A810[])(void); + +void func_80155580(void *a0) { + D_8018A810[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018AA04[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018AA04[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018AC74 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018AC74[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018AC74[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018AC84[])(void); + +void func_80157544(void *a0) { + D_8018AC84[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801C5D70; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801C5D70 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801C5D70 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018ACAC[])(void); +extern int D_801C5D70; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018ACAC[*(unsigned short *)((char *)param_1 + 2)](); + D_801C5D70 = D_801C5D70 - 1; + if (D_801C5D70 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018AC8C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018AC8C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018AC9C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018AC9C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018ACEC[])(void); + +void func_80157DC4(void *a0) { + D_8018ACEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018ACF4[])(void); + +void func_80157FC4(void *a0) { + D_8018ACF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018ACC0; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018ACC0); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018AD00[])(void); + +void func_8015824C(void *a0) { + D_8018AD00[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018ACD0; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018ACD0); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801C5D78; +extern s32 D_801C5D84; +extern s32 D_801C5D88; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801C5D78 = 0; + D_801C5D84 = 1; + D_801C5D88 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801C5D78; +extern s32 D_801C5D84; +extern s32 D_801C5D88; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801C5D78 = 0; + D_801C5D84 = 1; + D_801C5D88 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018AD3C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018AD3C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801C5D78; + +void func_80158BB0(void *arg0) { + if (D_801C5D78 == 0) { + D_801C5D78 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801C5D84; +extern s32 D_8018AD10[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801C5D84; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018AD10[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801C5D88; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801C5D88 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5D78; +extern s32 D_801C5D80; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801C5D78 == 4) { + D_801C5D78 = 5; + } + if (D_801C5D80 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018AD78[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018AD78; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_801594E8); + + +extern void (*D_8018AF8C[])(void); + +void func_80159698(void *a0) { + D_8018AF8C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018ADAC)); + func_80028620(1, &(*(u8 *)&D_8018ADAC) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018ADAC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018B030[])(void); + +void func_80159968(void *a0) { + D_8018B030[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018B184[])(void); + +void func_80159B70(void *a0) { + D_8018B184[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018AFA0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018AFA0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018B18C[])(void); + +void func_8015A264(void *a0) { + D_8018B18C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018AFB0; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018AFB0); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8015A3C8.c b/src/ov_SC05_010/ov_SC05_010_jr_8015A3C8.c new file mode 100644 index 000000000..5dd9fc4eb --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018AED8; +extern u8 D_8018AE48; +extern u8 D_8018AE24; +extern u8 D_8018AE00; +extern u8 D_8018AEB4; +extern u8 D_8018AE90; +extern u8 D_8018AE6C; +extern u8 D_8018ADDC; +extern void func_80145934(void); +extern u8 D_8018AF68; +extern u8 D_8018AF44; +extern u8 D_8018AF20; +extern u8 D_8018AEFC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018A360[]; +extern unsigned char D_8018A390[]; +extern unsigned char D_8018A3E0[]; +extern unsigned char D_8018A410[]; +extern unsigned char D_8018A440[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018A490[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018A558[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A5E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A5E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C5D38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C5D3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A618; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A6C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A6E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A6D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A6F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A704[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A714[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A72C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A71C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A740[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A75C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A74C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A770[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A784[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A798; +extern void (*D_8018A7C0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A7A0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A80C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A810[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018AC74[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018AC84[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C5D70; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018ACAC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018AC8C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018AC9C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018ACEC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018ACF4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018ACC0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018AD00[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018ACD0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C5D78; +extern s32 D_801C5D84; +extern s32 D_801C5D88; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018AD3C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018AD10[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5D80; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018AF8C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018ADAC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018B030[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018B184[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018AFA0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018B18C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018AFB0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018B03C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018AFC0; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018B03C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018AFC0); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018B03C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018AFD0 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018AFD0; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018AFD0); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018B194[])(void); + +void func_8015AD3C(void *a0) { + D_8018B194[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_011/ov_SC05_011_after.c b/src/ov_SC05_011/ov_SC05_011_after.c index b01ab85f5..3054d7733 100644 --- a/src/ov_SC05_011/ov_SC05_011_after.c +++ b/src/ov_SC05_011/ov_SC05_011_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_011/nonmatchings/ov_SC05_011_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FB44[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FB44[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017FB84[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017FB84[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017FB88[])(void); - -void func_80155580(void *a0) { - D_8017FB88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8017FD7C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8017FD7C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017FFEC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8017FFEC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8017FFEC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8017FFFC[])(void); - -void func_80157544(void *a0) { - D_8017FFFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019BEF8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019BEF8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019BEF8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180024[])(void); -extern int D_8019BEF8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180024[*(unsigned short *)((char *)param_1 + 2)](); - D_8019BEF8 = D_8019BEF8 - 1; - if (D_8019BEF8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180004; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180004); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180014; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180014); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180064[])(void); - -void func_80157DC4(void *a0) { - D_80180064[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018006C[])(void); - -void func_80157FC4(void *a0) { - D_8018006C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180038; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180038); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180078[])(void); - -void func_8015824C(void *a0) { - D_80180078[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180048; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180048); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019BF00; -extern s32 D_8019BF0C; -extern s32 D_8019BF10; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019BF00 = 0; - D_8019BF0C = 1; - D_8019BF10 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019BF00; -extern s32 D_8019BF0C; -extern s32 D_8019BF10; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019BF00 = 0; - D_8019BF0C = 1; - D_8019BF10 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801800B4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801800B4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019BF00; - -void func_80158BB0(void *arg0) { - if (D_8019BF00 == 0) { - D_8019BF00 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019BF0C; -extern s32 D_80180088[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019BF0C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180088[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019BF10; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019BF10 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019BF00; -extern s32 D_8019BF08; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019BF00 == 4) { - D_8019BF00 = 5; - } - if (D_8019BF08 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801800F0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801800F0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_801594E8); - - -extern void (*D_80180304[])(void); - -void func_80159698(void *a0) { - D_80180304[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180124)); - func_80028620(1, &(*(u8 *)&D_80180124) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180124) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801803A8[])(void); - -void func_80159968(void *a0) { - D_801803A8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801804FC[])(void); - -void func_80159B70(void *a0) { - D_801804FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80180318; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180318); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180504[])(void); - -void func_8015A264(void *a0) { - D_80180504[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80180328; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180328); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801803B4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80180338; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801803B4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180338); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801803B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180348 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180348; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180348); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018050C[])(void); - -void func_8015AD3C(void *a0) { - D_8018050C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8015444C.c b/src/ov_SC05_011/ov_SC05_011_jr_8015444C.c new file mode 100644 index 000000000..ce87bb527 --- /dev/null +++ b/src/ov_SC05_011/ov_SC05_011_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180250; +extern u8 D_801801C0; +extern u8 D_8018019C; +extern u8 D_80180178; +extern u8 D_8018022C; +extern u8 D_80180208; +extern u8 D_801801E4; +extern u8 D_80180154; +extern void func_80145934(void); +extern u8 D_801802E0; +extern u8 D_801802BC; +extern u8 D_80180298; +extern u8 D_80180274; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F6D8[]; +extern unsigned char D_8017F708[]; +extern unsigned char D_8017F758[]; +extern unsigned char D_8017F788[]; +extern unsigned char D_8017F7B8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F808[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F8D0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F958[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F960; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BEC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BEC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F990; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FA38[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA5C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA4C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA70[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA7C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA8C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FAA4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA94; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FAB8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FAD4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FAC4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAE8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB10; +extern void (*D_8017FB38[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FB18; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FB44[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FB44[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017FB84[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017FB84[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017FB88[])(void); + +void func_80155580(void *a0) { + D_8017FB88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8017FD7C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8017FD7C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017FFEC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFEC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8017FFEC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8017FFFC[])(void); + +void func_80157544(void *a0) { + D_8017FFFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019BEF8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019BEF8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019BEF8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180024[])(void); +extern int D_8019BEF8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180024[*(unsigned short *)((char *)param_1 + 2)](); + D_8019BEF8 = D_8019BEF8 - 1; + if (D_8019BEF8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180004; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180004); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180014; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180014); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180064[])(void); + +void func_80157DC4(void *a0) { + D_80180064[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018006C[])(void); + +void func_80157FC4(void *a0) { + D_8018006C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180038; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180038); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180078[])(void); + +void func_8015824C(void *a0) { + D_80180078[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180048; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180048); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019BF00; +extern s32 D_8019BF0C; +extern s32 D_8019BF10; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019BF00 = 0; + D_8019BF0C = 1; + D_8019BF10 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019BF00; +extern s32 D_8019BF0C; +extern s32 D_8019BF10; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019BF00 = 0; + D_8019BF0C = 1; + D_8019BF10 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801800B4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801800B4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019BF00; + +void func_80158BB0(void *arg0) { + if (D_8019BF00 == 0) { + D_8019BF00 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019BF0C; +extern s32 D_80180088[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019BF0C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180088[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019BF10; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019BF10 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BF00; +extern s32 D_8019BF08; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019BF00 == 4) { + D_8019BF00 = 5; + } + if (D_8019BF08 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801800F0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801800F0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_801594E8); + + +extern void (*D_80180304[])(void); + +void func_80159698(void *a0) { + D_80180304[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180124)); + func_80028620(1, &(*(u8 *)&D_80180124) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180124) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801803A8[])(void); + +void func_80159968(void *a0) { + D_801803A8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801804FC[])(void); + +void func_80159B70(void *a0) { + D_801804FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80180318; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80180318); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_011/nonmatchings/ov_SC05_011_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180504[])(void); + +void func_8015A264(void *a0) { + D_80180504[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80180328; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80180328); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_011/ov_SC05_011_jr_8015A3C8.c b/src/ov_SC05_011/ov_SC05_011_jr_8015A3C8.c new file mode 100644 index 000000000..c6f34cb65 --- /dev/null +++ b/src/ov_SC05_011/ov_SC05_011_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180250; +extern u8 D_801801C0; +extern u8 D_8018019C; +extern u8 D_80180178; +extern u8 D_8018022C; +extern u8 D_80180208; +extern u8 D_801801E4; +extern u8 D_80180154; +extern void func_80145934(void); +extern u8 D_801802E0; +extern u8 D_801802BC; +extern u8 D_80180298; +extern u8 D_80180274; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F6D8[]; +extern unsigned char D_8017F708[]; +extern unsigned char D_8017F758[]; +extern unsigned char D_8017F788[]; +extern unsigned char D_8017F7B8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F808[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F8D0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F958[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F960; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019BEC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019BEC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017F990; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FA38[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FA5C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FA4C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FA70[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FA7C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FA8C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FAA4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FA94; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FAB8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FAD4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FAC4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FAE8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB10; +extern void (*D_8017FB38[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FB18; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FB84[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FB88[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017FFEC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017FFFC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019BEF8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180024[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180004; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180014; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180064[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018006C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180038; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180078[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180048; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019BF00; +extern s32 D_8019BF0C; +extern s32 D_8019BF10; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801800B4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180088[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019BF08; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180304[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180124[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801803A8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801804FC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80180318; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180504[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80180328; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801803B4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80180338; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801803B4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80180338); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801803B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180348 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180348; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180348); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018050C[])(void); + +void func_8015AD3C(void *a0) { + D_8018050C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_017/ov_SC05_017_after.c b/src/ov_SC05_017/ov_SC05_017_after.c index c3a8bcbcd..488770ef0 100644 --- a/src/ov_SC05_017/ov_SC05_017_after.c +++ b/src/ov_SC05_017/ov_SC05_017_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_017/nonmatchings/ov_SC05_017_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018F004[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018F004[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018F044[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018F044[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018F048[])(void); - -void func_80155580(void *a0) { - D_8018F048[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018F23C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018F23C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4AC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F4AC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018F4AC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018F4BC[])(void); - -void func_80157544(void *a0) { - D_8018F4BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801EBA38; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801EBA38 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801EBA38 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018F4E4[])(void); -extern int D_801EBA38; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018F4E4[*(unsigned short *)((char *)param_1 + 2)](); - D_801EBA38 = D_801EBA38 - 1; - if (D_801EBA38 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F4C4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F4C4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018F4D4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F4D4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018F524[])(void); - -void func_80157DC4(void *a0) { - D_8018F524[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018F52C[])(void); - -void func_80157FC4(void *a0) { - D_8018F52C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018F4F8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018F4F8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018F538[])(void); - -void func_8015824C(void *a0) { - D_8018F538[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018F508; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F508); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801EBA40; -extern s32 D_801EBA4C; -extern s32 D_801EBA50; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801EBA40 = 0; - D_801EBA4C = 1; - D_801EBA50 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801EBA40; -extern s32 D_801EBA4C; -extern s32 D_801EBA50; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801EBA40 = 0; - D_801EBA4C = 1; - D_801EBA50 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018F574[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018F574[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801EBA40; - -void func_80158BB0(void *arg0) { - if (D_801EBA40 == 0) { - D_801EBA40 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801EBA4C; -extern s32 D_8018F548[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801EBA4C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F548[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801EBA50; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801EBA50 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801EBA40; -extern s32 D_801EBA48; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801EBA40 == 4) { - D_801EBA40 = 5; - } - if (D_801EBA48 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018F5B0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018F5B0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_801594E8); - - -extern void (*D_8018F7C4[])(void); - -void func_80159698(void *a0) { - D_8018F7C4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018F5E4)); - func_80028620(1, &(*(u8 *)&D_8018F5E4) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018F5E4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018F868[])(void); - -void func_80159968(void *a0) { - D_8018F868[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018F9BC[])(void); - -void func_80159B70(void *a0) { - D_8018F9BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018F7D8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F7D8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018F9C4[])(void); - -void func_8015A264(void *a0) { - D_8018F9C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018F7E8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F7E8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018F874[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8018F7F8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018F874[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F7F8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018F874[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F808 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018F808; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018F808); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018F9CC[])(void); - -void func_8015AD3C(void *a0) { - D_8018F9CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8015444C.c b/src/ov_SC05_017/ov_SC05_017_jr_8015444C.c new file mode 100644 index 000000000..930c3b655 --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F710; +extern u8 D_8018F680; +extern u8 D_8018F65C; +extern u8 D_8018F638; +extern u8 D_8018F6EC; +extern u8 D_8018F6C8; +extern u8 D_8018F6A4; +extern u8 D_8018F614; +extern void func_80145934(void); +extern u8 D_8018F7A0; +extern u8 D_8018F77C; +extern u8 D_8018F758; +extern u8 D_8018F734; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EB98[]; +extern unsigned char D_8018EBC8[]; +extern unsigned char D_8018EC18[]; +extern unsigned char D_8018EC48[]; +extern unsigned char D_8018EC78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ECC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018ED90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EBA00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EBA04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EEF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EF64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EF78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EF94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EF84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018EFD0; +extern void (*D_8018EFF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018EFD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018F004[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018F004[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018F044[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018F044[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018F048[])(void); + +void func_80155580(void *a0) { + D_8018F048[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018F23C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018F23C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F4AC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4AC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018F4AC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018F4BC[])(void); + +void func_80157544(void *a0) { + D_8018F4BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801EBA38; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801EBA38 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801EBA38 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018F4E4[])(void); +extern int D_801EBA38; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018F4E4[*(unsigned short *)((char *)param_1 + 2)](); + D_801EBA38 = D_801EBA38 - 1; + if (D_801EBA38 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F4C4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F4C4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018F4D4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F4D4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018F524[])(void); + +void func_80157DC4(void *a0) { + D_8018F524[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018F52C[])(void); + +void func_80157FC4(void *a0) { + D_8018F52C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018F4F8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018F4F8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018F538[])(void); + +void func_8015824C(void *a0) { + D_8018F538[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018F508; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F508); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801EBA40; +extern s32 D_801EBA4C; +extern s32 D_801EBA50; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801EBA40 = 0; + D_801EBA4C = 1; + D_801EBA50 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801EBA40; +extern s32 D_801EBA4C; +extern s32 D_801EBA50; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801EBA40 = 0; + D_801EBA4C = 1; + D_801EBA50 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018F574[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018F574[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801EBA40; + +void func_80158BB0(void *arg0) { + if (D_801EBA40 == 0) { + D_801EBA40 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801EBA4C; +extern s32 D_8018F548[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801EBA4C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F548[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801EBA50; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801EBA50 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801EBA40; +extern s32 D_801EBA48; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801EBA40 == 4) { + D_801EBA40 = 5; + } + if (D_801EBA48 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018F5B0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018F5B0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_801594E8); + + +extern void (*D_8018F7C4[])(void); + +void func_80159698(void *a0) { + D_8018F7C4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018F5E4)); + func_80028620(1, &(*(u8 *)&D_8018F5E4) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018F5E4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018F868[])(void); + +void func_80159968(void *a0) { + D_8018F868[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018F9BC[])(void); + +void func_80159B70(void *a0) { + D_8018F9BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018F7D8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F7D8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018F9C4[])(void); + +void func_8015A264(void *a0) { + D_8018F9C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018F7E8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F7E8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_017/ov_SC05_017_jr_8015A3C8.c b/src/ov_SC05_017/ov_SC05_017_jr_8015A3C8.c new file mode 100644 index 000000000..eb0cc15ea --- /dev/null +++ b/src/ov_SC05_017/ov_SC05_017_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F710; +extern u8 D_8018F680; +extern u8 D_8018F65C; +extern u8 D_8018F638; +extern u8 D_8018F6EC; +extern u8 D_8018F6C8; +extern u8 D_8018F6A4; +extern u8 D_8018F614; +extern void func_80145934(void); +extern u8 D_8018F7A0; +extern u8 D_8018F77C; +extern u8 D_8018F758; +extern u8 D_8018F734; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018EB98[]; +extern unsigned char D_8018EBC8[]; +extern unsigned char D_8018EC18[]; +extern unsigned char D_8018EC48[]; +extern unsigned char D_8018EC78[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018ECC8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018ED90[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EE18[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EE20; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801EBA00; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801EBA04; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EE50; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018EEF8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018EF1C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018EF0C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018EF30[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018EF3C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018EF4C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018EF64[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018EF54; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018EF78[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018EF94[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018EF84; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018EFA8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018EFBC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018EFD0; +extern void (*D_8018EFF8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018EFD8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F044[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F048[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F4AC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F4BC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801EBA38; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F4E4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F4C4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F4D4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F524[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F52C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F4F8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F538[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F508; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801EBA40; +extern s32 D_801EBA4C; +extern s32 D_801EBA50; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F574[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F548[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801EBA48; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F7C4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F5E4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F868[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018F9BC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F7D8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018F9C4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F7E8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F874[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8018F7F8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F874[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018F7F8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F874[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F808 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F808; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018F808); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018F9CC[])(void); + +void func_8015AD3C(void *a0) { + D_8018F9CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_018/ov_SC05_018_after.c b/src/ov_SC05_018/ov_SC05_018_after.c index f435cf158..0e578fb82 100644 --- a/src/ov_SC05_018/ov_SC05_018_after.c +++ b/src/ov_SC05_018/ov_SC05_018_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_018/nonmatchings/ov_SC05_018_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80188760[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80188760[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801887A0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801887A0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801887A4[])(void); - -void func_80155580(void *a0) { - D_801887A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80188998[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80188998[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188C08 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188C08[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188C08[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188C18[])(void); - -void func_80157544(void *a0) { - D_80188C18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E5178; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E5178 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E5178 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80188C40[])(void); -extern int D_801E5178; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80188C40[*(unsigned short *)((char *)param_1 + 2)](); - D_801E5178 = D_801E5178 - 1; - if (D_801E5178 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188C20; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188C20); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188C30; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188C30); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188C80[])(void); - -void func_80157DC4(void *a0) { - D_80188C80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80188C88[])(void); - -void func_80157FC4(void *a0) { - D_80188C88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80188C54; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80188C54); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80188C94[])(void); - -void func_8015824C(void *a0) { - D_80188C94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80188C64; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188C64); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E5180; -extern s32 D_801E518C; -extern s32 D_801E5190; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E5180 = 0; - D_801E518C = 1; - D_801E5190 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E5180; -extern s32 D_801E518C; -extern s32 D_801E5190; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E5180 = 0; - D_801E518C = 1; - D_801E5190 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188CD0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188CD0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E5180; - -void func_80158BB0(void *arg0) { - if (D_801E5180 == 0) { - D_801E5180 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E518C; -extern s32 D_80188CA4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E518C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188CA4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E5190; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E5190 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E5180; -extern s32 D_801E5188; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E5180 == 4) { - D_801E5180 = 5; - } - if (D_801E5188 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80188D0C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80188D0C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_801594E8); - - -extern void (*D_80188F20[])(void); - -void func_80159698(void *a0) { - D_80188F20[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80188D40)); - func_80028620(1, &(*(u8 *)&D_80188D40) + 0x10); - func_80028620(2, &(*(u8 *)&D_80188D40) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188FC4[])(void); - -void func_80159968(void *a0) { - D_80188FC4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80189118[])(void); - -void func_80159B70(void *a0) { - D_80189118[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188F34; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188F34); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80189120[])(void); - -void func_8015A264(void *a0) { - D_80189120[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80188F44; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188F44); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188FD0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80188F54; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188FD0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80188F54); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188FD0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188F64 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80188F64; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80188F64); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80189128[])(void); - -void func_8015AD3C(void *a0) { - D_80189128[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8015444C.c b/src/ov_SC05_018/ov_SC05_018_jr_8015444C.c new file mode 100644 index 000000000..e5a460e11 --- /dev/null +++ b/src/ov_SC05_018/ov_SC05_018_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188E6C; +extern u8 D_80188DDC; +extern u8 D_80188DB8; +extern u8 D_80188D94; +extern u8 D_80188E48; +extern u8 D_80188E24; +extern u8 D_80188E00; +extern u8 D_80188D70; +extern void func_80145934(void); +extern u8 D_80188EFC; +extern u8 D_80188ED8; +extern u8 D_80188EB4; +extern u8 D_80188E90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801882F4[]; +extern unsigned char D_80188324[]; +extern unsigned char D_80188374[]; +extern unsigned char D_801883A4[]; +extern unsigned char D_801883D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188424[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801884EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188574[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018857C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5140; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5144; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801885AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188654[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188678[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188668; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018868C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188698[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801886A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801886C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801886B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801886D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801886F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801886E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188704[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188718[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018872C; +extern void (*D_80188754[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188734; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80188760[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80188760[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801887A0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801887A0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801887A4[])(void); + +void func_80155580(void *a0) { + D_801887A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80188998[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80188998[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188C08 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188C08[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188C08[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188C18[])(void); + +void func_80157544(void *a0) { + D_80188C18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E5178; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E5178 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E5178 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80188C40[])(void); +extern int D_801E5178; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80188C40[*(unsigned short *)((char *)param_1 + 2)](); + D_801E5178 = D_801E5178 - 1; + if (D_801E5178 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188C20; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188C20); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188C30; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188C30); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188C80[])(void); + +void func_80157DC4(void *a0) { + D_80188C80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80188C88[])(void); + +void func_80157FC4(void *a0) { + D_80188C88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80188C54; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80188C54); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80188C94[])(void); + +void func_8015824C(void *a0) { + D_80188C94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80188C64; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188C64); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E5180; +extern s32 D_801E518C; +extern s32 D_801E5190; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E5180 = 0; + D_801E518C = 1; + D_801E5190 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E5180; +extern s32 D_801E518C; +extern s32 D_801E5190; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E5180 = 0; + D_801E518C = 1; + D_801E5190 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188CD0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188CD0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E5180; + +void func_80158BB0(void *arg0) { + if (D_801E5180 == 0) { + D_801E5180 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E518C; +extern s32 D_80188CA4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E518C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188CA4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E5190; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E5190 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5180; +extern s32 D_801E5188; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E5180 == 4) { + D_801E5180 = 5; + } + if (D_801E5188 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80188D0C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80188D0C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_801594E8); + + +extern void (*D_80188F20[])(void); + +void func_80159698(void *a0) { + D_80188F20[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80188D40)); + func_80028620(1, &(*(u8 *)&D_80188D40) + 0x10); + func_80028620(2, &(*(u8 *)&D_80188D40) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188FC4[])(void); + +void func_80159968(void *a0) { + D_80188FC4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80189118[])(void); + +void func_80159B70(void *a0) { + D_80189118[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188F34; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188F34); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80189120[])(void); + +void func_8015A264(void *a0) { + D_80189120[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80188F44; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188F44); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_018/ov_SC05_018_jr_8015A3C8.c b/src/ov_SC05_018/ov_SC05_018_jr_8015A3C8.c new file mode 100644 index 000000000..8f1f6492b --- /dev/null +++ b/src/ov_SC05_018/ov_SC05_018_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188E6C; +extern u8 D_80188DDC; +extern u8 D_80188DB8; +extern u8 D_80188D94; +extern u8 D_80188E48; +extern u8 D_80188E24; +extern u8 D_80188E00; +extern u8 D_80188D70; +extern void func_80145934(void); +extern u8 D_80188EFC; +extern u8 D_80188ED8; +extern u8 D_80188EB4; +extern u8 D_80188E90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801882F4[]; +extern unsigned char D_80188324[]; +extern unsigned char D_80188374[]; +extern unsigned char D_801883A4[]; +extern unsigned char D_801883D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80188424[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801884EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188574[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018857C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E5140; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E5144; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801885AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188654[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188678[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188668; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018868C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188698[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801886A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801886C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801886B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801886D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801886F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801886E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80188704[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80188718[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018872C; +extern void (*D_80188754[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80188734; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801887A0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801887A4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188C08[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188C18[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E5178; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188C40[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188C20; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188C30; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188C80[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188C88[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188C54; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188C94[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188C64; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E5180; +extern s32 D_801E518C; +extern s32 D_801E5190; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188CD0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188CA4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E5188; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188F20[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188D40[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188FC4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80189118[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188F34; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80189120[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188F44; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188FD0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80188F54; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188FD0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80188F54); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188FD0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188F64 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188F64; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80188F64); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80189128[])(void); + +void func_8015AD3C(void *a0) { + D_80189128[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC05_019/ov_SC05_019_after.c b/src/ov_SC05_019/ov_SC05_019_after.c index 1b5733f96..51d88356d 100644 --- a/src/ov_SC05_019/ov_SC05_019_after.c +++ b/src/ov_SC05_019/ov_SC05_019_after.c @@ -2616,1309 +2616,3 @@ 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_SC05_019/nonmatchings/ov_SC05_019_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", 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) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801810A4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801810E4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801810E4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801810E8[])(void); - -void func_80155580(void *a0) { - D_801810E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801812DC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801812DC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018154C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018154C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018155C[])(void); - -void func_80157544(void *a0) { - D_8018155C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8018E848; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8018E848 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8018E848 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80181584[])(void); -extern int D_8018E848; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80181584[*(unsigned short *)((char *)param_1 + 2)](); - D_8018E848 = D_8018E848 - 1; - if (D_8018E848 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80181564; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80181574; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801815C4[])(void); - -void func_80157DC4(void *a0) { - D_801815C4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801815CC[])(void); - -void func_80157FC4(void *a0) { - D_801815CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80181598; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80181598); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801815D8[])(void); - -void func_8015824C(void *a0) { - D_801815D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801815A8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8018E850; -extern s32 D_8018E85C; -extern s32 D_8018E860; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8018E850 = 0; - D_8018E85C = 1; - D_8018E860 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80181614[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80181614[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8018E850; - -void func_80158BB0(void *arg0) { - if (D_8018E850 == 0) { - D_8018E850 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8018E85C; -extern s32 D_801815E8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8018E85C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8018E860; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8018E860 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8018E850; -extern s32 D_8018E858; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8018E850 == 4) { - D_8018E850 = 5; - } - if (D_8018E858 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80181650[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80181650; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_801594E8); - - -extern void (*D_80181864[])(void); - -void func_80159698(void *a0) { - D_80181864[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80181684)); - func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); - func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181908[])(void); - -void func_80159968(void *a0) { - D_80181908[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80181A5C[])(void); - -void func_80159B70(void *a0) { - D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181878; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181A64[])(void); - -void func_8015A264(void *a0) { - D_80181A64[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181888; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181914[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80181898; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181914[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181914[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801818A8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801818A8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80181A6C[])(void); - -void func_8015AD3C(void *a0) { - D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8015444C.c b/src/ov_SC05_019/ov_SC05_019_jr_8015444C.c new file mode 100644 index 000000000..011d93fd7 --- /dev/null +++ b/src/ov_SC05_019/ov_SC05_019_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801810A4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801810A4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801810E4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801810E4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801810E8[])(void); + +void func_80155580(void *a0) { + D_801810E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801812DC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801812DC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018154C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018154C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018155C[])(void); + +void func_80157544(void *a0) { + D_8018155C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8018E848; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8018E848 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8018E848 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80181584[])(void); +extern int D_8018E848; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80181584[*(unsigned short *)((char *)param_1 + 2)](); + D_8018E848 = D_8018E848 - 1; + if (D_8018E848 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80181564); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80181574; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80181574); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801815C4[])(void); + +void func_80157DC4(void *a0) { + D_801815C4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801815CC[])(void); + +void func_80157FC4(void *a0) { + D_801815CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80181598; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80181598); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801815D8[])(void); + +void func_8015824C(void *a0) { + D_801815D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801815A8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801815A8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8018E850 = 0; + D_8018E85C = 1; + D_8018E860 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80181614[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80181614[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8018E850; + +void func_80158BB0(void *arg0) { + if (D_8018E850 == 0) { + D_8018E850 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8018E85C; +extern s32 D_801815E8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8018E85C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801815E8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8018E860; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8018E860 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E850; +extern s32 D_8018E858; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8018E850 == 4) { + D_8018E850 = 5; + } + if (D_8018E858 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80181650[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80181650; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_801594E8); + + +extern void (*D_80181864[])(void); + +void func_80159698(void *a0) { + D_80181864[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80181684)); + func_80028620(1, &(*(u8 *)&D_80181684) + 0x10); + func_80028620(2, &(*(u8 *)&D_80181684) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181908[])(void); + +void func_80159968(void *a0) { + D_80181908[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80181A5C[])(void); + +void func_80159B70(void *a0) { + D_80181A5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181878; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181878); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC05_019/nonmatchings/ov_SC05_019_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181A64[])(void); + +void func_8015A264(void *a0) { + D_80181A64[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181888; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181888); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC05_019/ov_SC05_019_jr_8015A3C8.c b/src/ov_SC05_019/ov_SC05_019_jr_8015A3C8.c new file mode 100644 index 000000000..43cb291ad --- /dev/null +++ b/src/ov_SC05_019/ov_SC05_019_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801817B0; +extern u8 D_80181720; +extern u8 D_801816FC; +extern u8 D_801816D8; +extern u8 D_8018178C; +extern u8 D_80181768; +extern u8 D_80181744; +extern u8 D_801816B4; +extern void func_80145934(void); +extern u8 D_80181840; +extern u8 D_8018181C; +extern u8 D_801817F8; +extern u8 D_801817D4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180C38[]; +extern unsigned char D_80180C68[]; +extern unsigned char D_80180CB8[]; +extern unsigned char D_80180CE8[]; +extern unsigned char D_80180D18[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180D68[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180E30[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80180EB8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180EC0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8018E810; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8018E814; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180EF0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80180F98[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180FBC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180FAC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180FD0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180FDC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180FEC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181004[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180FF4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181018[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181034[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181024; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181048[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018105C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181070; +extern void (*D_80181098[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181078; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801810E4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801810E8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018154C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018155C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8018E848; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80181584[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80181564; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80181574; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801815C4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801815CC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80181598; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801815D8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801815A8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8018E850; +extern s32 D_8018E85C; +extern s32 D_8018E860; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80181614[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801815E8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8018E858; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181864[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80181684[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181908[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80181A5C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181878; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181A64[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181888; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181914[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80181898; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181914[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80181898)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181914[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801818A8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801818A8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801818A8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80181A6C[])(void); + +void func_8015AD3C(void *a0) { + D_80181A6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_000/ov_SC06_000_after.c b/src/ov_SC06_000/ov_SC06_000_after.c index f71fe6233..0d083448e 100644 --- a/src/ov_SC06_000/ov_SC06_000_after.c +++ b/src/ov_SC06_000/ov_SC06_000_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_000/nonmatchings/ov_SC06_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018A0B4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018A0B4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018A0F4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018A0F4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018A0F8[])(void); - -void func_80155580(void *a0) { - D_8018A0F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018A2EC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018A2EC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018A55C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018A55C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018A55C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018A56C[])(void); - -void func_80157544(void *a0) { - D_8018A56C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801AD4B8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801AD4B8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801AD4B8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018A594[])(void); -extern int D_801AD4B8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018A594[*(unsigned short *)((char *)param_1 + 2)](); - D_801AD4B8 = D_801AD4B8 - 1; - if (D_801AD4B8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018A574; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018A574); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018A584; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018A584); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018A5D4[])(void); - -void func_80157DC4(void *a0) { - D_8018A5D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018A5DC[])(void); - -void func_80157FC4(void *a0) { - D_8018A5DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018A5A8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018A5A8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018A5E8[])(void); - -void func_8015824C(void *a0) { - D_8018A5E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018A5B8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018A5B8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801AD4C0; -extern s32 D_801AD4CC; -extern s32 D_801AD4D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801AD4C0 = 0; - D_801AD4CC = 1; - D_801AD4D0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801AD4C0; -extern s32 D_801AD4CC; -extern s32 D_801AD4D0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801AD4C0 = 0; - D_801AD4CC = 1; - D_801AD4D0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018A624[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018A624[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801AD4C0; - -void func_80158BB0(void *arg0) { - if (D_801AD4C0 == 0) { - D_801AD4C0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801AD4CC; -extern s32 D_8018A5F8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801AD4CC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018A5F8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801AD4D0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801AD4D0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801AD4C0; -extern s32 D_801AD4C8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801AD4C0 == 4) { - D_801AD4C0 = 5; - } - if (D_801AD4C8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018A660[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018A660; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_801594E8); - - -extern void (*D_8018A874[])(void); - -void func_80159698(void *a0) { - D_8018A874[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018A694)); - func_80028620(1, &(*(u8 *)&D_8018A694) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018A694) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018A918[])(void); - -void func_80159968(void *a0) { - D_8018A918[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018AA6C[])(void); - -void func_80159B70(void *a0) { - D_8018AA6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018A888; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A888); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018AA74[])(void); - -void func_8015A264(void *a0) { - D_8018AA74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018A898; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018A898); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018A924[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_8018A8A8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018A924[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A8A8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018A924[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018A8B8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018A8B8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018A8B8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018AA7C[])(void); - -void func_8015AD3C(void *a0) { - D_8018AA7C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8015444C.c b/src/ov_SC06_000/ov_SC06_000_jr_8015444C.c new file mode 100644 index 000000000..d3ceb4490 --- /dev/null +++ b/src/ov_SC06_000/ov_SC06_000_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A7C0; +extern u8 D_8018A730; +extern u8 D_8018A70C; +extern u8 D_8018A6E8; +extern u8 D_8018A79C; +extern u8 D_8018A778; +extern u8 D_8018A754; +extern u8 D_8018A6C4; +extern void func_80145934(void); +extern u8 D_8018A850; +extern u8 D_8018A82C; +extern u8 D_8018A808; +extern u8 D_8018A7E4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189C48[]; +extern unsigned char D_80189C78[]; +extern unsigned char D_80189CC8[]; +extern unsigned char D_80189CF8[]; +extern unsigned char D_80189D28[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189D78[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189E40[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189EC8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189ED0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AD480; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AD484; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189F00; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189FA8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189FCC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189FBC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189FE0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189FEC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189FFC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A014[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A004; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A028[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A044[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A034; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A058[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A06C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A080; +extern void (*D_8018A0A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A088; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018A0B4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018A0B4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018A0F4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018A0F4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018A0F8[])(void); + +void func_80155580(void *a0) { + D_8018A0F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018A2EC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018A2EC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018A55C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A55C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018A55C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018A56C[])(void); + +void func_80157544(void *a0) { + D_8018A56C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801AD4B8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801AD4B8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801AD4B8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018A594[])(void); +extern int D_801AD4B8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018A594[*(unsigned short *)((char *)param_1 + 2)](); + D_801AD4B8 = D_801AD4B8 - 1; + if (D_801AD4B8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A574; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018A574); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018A584; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018A584); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018A5D4[])(void); + +void func_80157DC4(void *a0) { + D_8018A5D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018A5DC[])(void); + +void func_80157FC4(void *a0) { + D_8018A5DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018A5A8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018A5A8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018A5E8[])(void); + +void func_8015824C(void *a0) { + D_8018A5E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018A5B8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018A5B8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801AD4C0; +extern s32 D_801AD4CC; +extern s32 D_801AD4D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801AD4C0 = 0; + D_801AD4CC = 1; + D_801AD4D0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801AD4C0; +extern s32 D_801AD4CC; +extern s32 D_801AD4D0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801AD4C0 = 0; + D_801AD4CC = 1; + D_801AD4D0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018A624[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018A624[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801AD4C0; + +void func_80158BB0(void *arg0) { + if (D_801AD4C0 == 0) { + D_801AD4C0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801AD4CC; +extern s32 D_8018A5F8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801AD4CC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018A5F8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801AD4D0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801AD4D0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801AD4C0; +extern s32 D_801AD4C8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801AD4C0 == 4) { + D_801AD4C0 = 5; + } + if (D_801AD4C8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018A660[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018A660; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_801594E8); + + +extern void (*D_8018A874[])(void); + +void func_80159698(void *a0) { + D_8018A874[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018A694)); + func_80028620(1, &(*(u8 *)&D_8018A694) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018A694) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018A918[])(void); + +void func_80159968(void *a0) { + D_8018A918[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018AA6C[])(void); + +void func_80159B70(void *a0) { + D_8018AA6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018A888; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018A888); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018AA74[])(void); + +void func_8015A264(void *a0) { + D_8018AA74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018A898; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018A898); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8015A3C8.c b/src/ov_SC06_000/ov_SC06_000_jr_8015A3C8.c new file mode 100644 index 000000000..0456525ae --- /dev/null +++ b/src/ov_SC06_000/ov_SC06_000_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018A7C0; +extern u8 D_8018A730; +extern u8 D_8018A70C; +extern u8 D_8018A6E8; +extern u8 D_8018A79C; +extern u8 D_8018A778; +extern u8 D_8018A754; +extern u8 D_8018A6C4; +extern void func_80145934(void); +extern u8 D_8018A850; +extern u8 D_8018A82C; +extern u8 D_8018A808; +extern u8 D_8018A7E4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80189C48[]; +extern unsigned char D_80189C78[]; +extern unsigned char D_80189CC8[]; +extern unsigned char D_80189CF8[]; +extern unsigned char D_80189D28[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80189D78[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80189E40[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80189EC8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80189ED0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AD480; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AD484; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80189F00; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80189FA8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80189FCC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80189FBC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80189FE0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80189FEC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80189FFC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A014[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A004; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A028[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A044[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A034; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A058[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A06C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A080; +extern void (*D_8018A0A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A088; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A0F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A0F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018A55C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018A56C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AD4B8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018A594[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018A574; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018A584; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018A5D4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018A5DC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018A5A8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018A5E8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018A5B8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AD4C0; +extern s32 D_801AD4CC; +extern s32 D_801AD4D0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018A624[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018A5F8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AD4C8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018A874[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018A694[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018A918[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018AA6C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018A888; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018AA74[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018A898; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018A924[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_8018A8A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018A924[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018A8A8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018A924[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018A8B8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018A8B8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018A8B8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018AA7C[])(void); + +void func_8015AD3C(void *a0) { + D_8018AA7C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_006/ov_SC06_006_after.c b/src/ov_SC06_006/ov_SC06_006_after.c index 502a5970b..de9b4a7cd 100644 --- a/src/ov_SC06_006/ov_SC06_006_after.c +++ b/src/ov_SC06_006/ov_SC06_006_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_006/nonmatchings/ov_SC06_006_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183BD8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183BD8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183C18[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183C18[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183C1C[])(void); - -void func_80155580(void *a0) { - D_80183C1C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80183E10[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80183E10[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184080 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184080[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184080[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184090[])(void); - -void func_80157544(void *a0) { - D_80184090[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801F6F00; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801F6F00 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801F6F00 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801840B8[])(void); -extern int D_801F6F00; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801840B8[*(unsigned short *)((char *)param_1 + 2)](); - D_801F6F00 = D_801F6F00 - 1; - if (D_801F6F00 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184098; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184098); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801840A8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801840A8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801840F8[])(void); - -void func_80157DC4(void *a0) { - D_801840F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80184100[])(void); - -void func_80157FC4(void *a0) { - D_80184100[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801840CC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801840CC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018410C[])(void); - -void func_8015824C(void *a0) { - D_8018410C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801840DC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801840DC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801F6F08; -extern s32 D_801F6F14; -extern s32 D_801F6F18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801F6F08 = 0; - D_801F6F14 = 1; - D_801F6F18 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801F6F08; -extern s32 D_801F6F14; -extern s32 D_801F6F18; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801F6F08 = 0; - D_801F6F14 = 1; - D_801F6F18 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184148[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184148[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801F6F08; - -void func_80158BB0(void *arg0) { - if (D_801F6F08 == 0) { - D_801F6F08 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801F6F14; -extern s32 D_8018411C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801F6F14; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018411C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801F6F18; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801F6F18 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801F6F08; -extern s32 D_801F6F10; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801F6F08 == 4) { - D_801F6F08 = 5; - } - if (D_801F6F10 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184184[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184184; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_801594E8); - - -extern void (*D_80184398[])(void); - -void func_80159698(void *a0) { - D_80184398[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801841B8)); - func_80028620(1, &(*(u8 *)&D_801841B8) + 0x10); - func_80028620(2, &(*(u8 *)&D_801841B8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018443C[])(void); - -void func_80159968(void *a0) { - D_8018443C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184590[])(void); - -void func_80159B70(void *a0) { - D_80184590[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801843AC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801843AC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184598[])(void); - -void func_8015A264(void *a0) { - D_80184598[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801843BC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801843BC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184448[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801843CC; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184448[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801843CC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184448[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801843DC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801843DC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801843DC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801845A0[])(void); - -void func_8015AD3C(void *a0) { - D_801845A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8015444C.c b/src/ov_SC06_006/ov_SC06_006_jr_8015444C.c new file mode 100644 index 000000000..e899ed0e0 --- /dev/null +++ b/src/ov_SC06_006/ov_SC06_006_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842E4; +extern u8 D_80184254; +extern u8 D_80184230; +extern u8 D_8018420C; +extern u8 D_801842C0; +extern u8 D_8018429C; +extern u8 D_80184278; +extern u8 D_801841E8; +extern void func_80145934(void); +extern u8 D_80184374; +extern u8 D_80184350; +extern u8 D_8018432C; +extern u8 D_80184308; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018376C[]; +extern unsigned char D_8018379C[]; +extern unsigned char D_801837EC[]; +extern unsigned char D_8018381C[]; +extern unsigned char D_8018384C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018389C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183964[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F6EC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F6ECC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183A24; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183ACC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AF0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AE0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183B04[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183B10[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183B20[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183B38[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183B28; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B4C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B68[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B58; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B7C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B90[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183BA4; +extern void (*D_80183BCC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183BAC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183BD8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183BD8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183C18[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183C18[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183C1C[])(void); + +void func_80155580(void *a0) { + D_80183C1C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80183E10[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80183E10[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184080 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184080[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184080[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184090[])(void); + +void func_80157544(void *a0) { + D_80184090[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801F6F00; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801F6F00 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801F6F00 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801840B8[])(void); +extern int D_801F6F00; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801840B8[*(unsigned short *)((char *)param_1 + 2)](); + D_801F6F00 = D_801F6F00 - 1; + if (D_801F6F00 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184098; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184098); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801840A8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801840A8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801840F8[])(void); + +void func_80157DC4(void *a0) { + D_801840F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80184100[])(void); + +void func_80157FC4(void *a0) { + D_80184100[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801840CC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801840CC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018410C[])(void); + +void func_8015824C(void *a0) { + D_8018410C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801840DC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801840DC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801F6F08; +extern s32 D_801F6F14; +extern s32 D_801F6F18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801F6F08 = 0; + D_801F6F14 = 1; + D_801F6F18 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801F6F08; +extern s32 D_801F6F14; +extern s32 D_801F6F18; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801F6F08 = 0; + D_801F6F14 = 1; + D_801F6F18 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184148[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184148[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801F6F08; + +void func_80158BB0(void *arg0) { + if (D_801F6F08 == 0) { + D_801F6F08 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801F6F14; +extern s32 D_8018411C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801F6F14; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018411C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801F6F18; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801F6F18 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6F08; +extern s32 D_801F6F10; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801F6F08 == 4) { + D_801F6F08 = 5; + } + if (D_801F6F10 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184184[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184184; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_801594E8); + + +extern void (*D_80184398[])(void); + +void func_80159698(void *a0) { + D_80184398[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801841B8)); + func_80028620(1, &(*(u8 *)&D_801841B8) + 0x10); + func_80028620(2, &(*(u8 *)&D_801841B8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018443C[])(void); + +void func_80159968(void *a0) { + D_8018443C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184590[])(void); + +void func_80159B70(void *a0) { + D_80184590[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801843AC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801843AC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184598[])(void); + +void func_8015A264(void *a0) { + D_80184598[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801843BC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801843BC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_006/ov_SC06_006_jr_8015A3C8.c b/src/ov_SC06_006/ov_SC06_006_jr_8015A3C8.c new file mode 100644 index 000000000..7d1b9041b --- /dev/null +++ b/src/ov_SC06_006/ov_SC06_006_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801842E4; +extern u8 D_80184254; +extern u8 D_80184230; +extern u8 D_8018420C; +extern u8 D_801842C0; +extern u8 D_8018429C; +extern u8 D_80184278; +extern u8 D_801841E8; +extern void func_80145934(void); +extern u8 D_80184374; +extern u8 D_80184350; +extern u8 D_8018432C; +extern u8 D_80184308; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018376C[]; +extern unsigned char D_8018379C[]; +extern unsigned char D_801837EC[]; +extern unsigned char D_8018381C[]; +extern unsigned char D_8018384C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018389C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183964[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801839EC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801839F4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801F6EC8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801F6ECC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183A24; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183ACC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183AF0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183AE0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183B04[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183B10[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183B20[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183B38[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183B28; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183B4C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183B68[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183B58; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183B7C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183B90[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183BA4; +extern void (*D_80183BCC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183BAC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183C18[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183C1C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184080[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184090[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801F6F00; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801840B8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184098; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801840A8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801840F8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80184100[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801840CC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018410C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801840DC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801F6F08; +extern s32 D_801F6F14; +extern s32 D_801F6F18; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184148[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018411C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801F6F10; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184398[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801841B8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018443C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184590[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801843AC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184598[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801843BC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184448[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801843CC; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184448[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801843CC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184448[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801843DC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801843DC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801843DC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801845A0[])(void); + +void func_8015AD3C(void *a0) { + D_801845A0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_008/ov_SC06_008_after.c b/src/ov_SC06_008/ov_SC06_008_after.c index 892279f2c..760f0dd69 100644 --- a/src/ov_SC06_008/ov_SC06_008_after.c +++ b/src/ov_SC06_008/ov_SC06_008_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_008/nonmatchings/ov_SC06_008_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80187640[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80187640[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80187680[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80187680[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80187684[])(void); - -void func_80155580(void *a0) { - D_80187684[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80187878[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80187878[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187AE8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80187AE8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80187AE8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187AF8[])(void); - -void func_80157544(void *a0) { - D_80187AF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A8E80; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A8E80 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A8E80 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187B20[])(void); -extern int D_801A8E80; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187B20[*(unsigned short *)((char *)param_1 + 2)](); - D_801A8E80 = D_801A8E80 - 1; - if (D_801A8E80 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187B00; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187B00); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187B10; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187B10); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80187B60[])(void); - -void func_80157DC4(void *a0) { - D_80187B60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80187B68[])(void); - -void func_80157FC4(void *a0) { - D_80187B68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80187B34; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80187B34); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80187B74[])(void); - -void func_8015824C(void *a0) { - D_80187B74[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80187B44; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187B44); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A8E88; -extern s32 D_801A8E94; -extern s32 D_801A8E98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A8E88 = 0; - D_801A8E94 = 1; - D_801A8E98 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A8E88; -extern s32 D_801A8E94; -extern s32 D_801A8E98; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A8E88 = 0; - D_801A8E94 = 1; - D_801A8E98 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187BB0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187BB0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A8E88; - -void func_80158BB0(void *arg0) { - if (D_801A8E88 == 0) { - D_801A8E88 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A8E94; -extern s32 D_80187B84[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A8E94; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187B84[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A8E98; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A8E98 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A8E88; -extern s32 D_801A8E90; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A8E88 == 4) { - D_801A8E88 = 5; - } - if (D_801A8E90 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187BEC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187BEC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_801594E8); - - -extern void (*D_80187E00[])(void); - -void func_80159698(void *a0) { - D_80187E00[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187C20)); - func_80028620(1, &(*(u8 *)&D_80187C20) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187C20) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187EA4[])(void); - -void func_80159968(void *a0) { - D_80187EA4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187FF8[])(void); - -void func_80159B70(void *a0) { - D_80187FF8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187E14; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187E14); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188000[])(void); - -void func_8015A264(void *a0) { - D_80188000[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80187E24; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187E24); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187EB0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern M2C_UNK D_80187E34; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187EB0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187E34)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187EB0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187E44 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80187E44; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80187E44); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188008[])(void); - -void func_8015AD3C(void *a0) { - D_80188008[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8015444C.c b/src/ov_SC06_008/ov_SC06_008_jr_8015444C.c new file mode 100644 index 000000000..18ae0344c --- /dev/null +++ b/src/ov_SC06_008/ov_SC06_008_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187D4C; +extern u8 D_80187CBC; +extern u8 D_80187C98; +extern u8 D_80187C74; +extern u8 D_80187D28; +extern u8 D_80187D04; +extern u8 D_80187CE0; +extern u8 D_80187C50; +extern void func_80145934(void); +extern u8 D_80187DDC; +extern u8 D_80187DB8; +extern u8 D_80187D94; +extern u8 D_80187D70; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801871D4[]; +extern unsigned char D_80187204[]; +extern unsigned char D_80187254[]; +extern unsigned char D_80187284[]; +extern unsigned char D_801872B4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187304[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801873CC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187454[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018745C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A8E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A8E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018748C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187534[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187558[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187548; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018756C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187578[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187588[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801875A0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187590; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801875B4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801875D0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801875C0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801875E4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801875F8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018760C; +extern void (*D_80187634[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187614; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80187640[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80187640[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80187680[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80187680[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80187684[])(void); + +void func_80155580(void *a0) { + D_80187684[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80187878[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80187878[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187AE8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80187AE8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80187AE8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187AF8[])(void); + +void func_80157544(void *a0) { + D_80187AF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A8E80; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A8E80 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A8E80 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187B20[])(void); +extern int D_801A8E80; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187B20[*(unsigned short *)((char *)param_1 + 2)](); + D_801A8E80 = D_801A8E80 - 1; + if (D_801A8E80 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187B00; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187B00); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187B10; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187B10); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80187B60[])(void); + +void func_80157DC4(void *a0) { + D_80187B60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80187B68[])(void); + +void func_80157FC4(void *a0) { + D_80187B68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80187B34; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80187B34); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80187B74[])(void); + +void func_8015824C(void *a0) { + D_80187B74[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80187B44; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80187B44); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A8E88; +extern s32 D_801A8E94; +extern s32 D_801A8E98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A8E88 = 0; + D_801A8E94 = 1; + D_801A8E98 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A8E88; +extern s32 D_801A8E94; +extern s32 D_801A8E98; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A8E88 = 0; + D_801A8E94 = 1; + D_801A8E98 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187BB0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187BB0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A8E88; + +void func_80158BB0(void *arg0) { + if (D_801A8E88 == 0) { + D_801A8E88 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A8E94; +extern s32 D_80187B84[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A8E94; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187B84[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A8E98; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A8E98 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8E88; +extern s32 D_801A8E90; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A8E88 == 4) { + D_801A8E88 = 5; + } + if (D_801A8E90 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187BEC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187BEC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_801594E8); + + +extern void (*D_80187E00[])(void); + +void func_80159698(void *a0) { + D_80187E00[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187C20)); + func_80028620(1, &(*(u8 *)&D_80187C20) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187C20) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187EA4[])(void); + +void func_80159968(void *a0) { + D_80187EA4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187FF8[])(void); + +void func_80159B70(void *a0) { + D_80187FF8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187E14; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187E14); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188000[])(void); + +void func_8015A264(void *a0) { + D_80188000[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80187E24; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80187E24); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_008/ov_SC06_008_jr_8015A3C8.c b/src/ov_SC06_008/ov_SC06_008_jr_8015A3C8.c new file mode 100644 index 000000000..439f95154 --- /dev/null +++ b/src/ov_SC06_008/ov_SC06_008_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187D4C; +extern u8 D_80187CBC; +extern u8 D_80187C98; +extern u8 D_80187C74; +extern u8 D_80187D28; +extern u8 D_80187D04; +extern u8 D_80187CE0; +extern u8 D_80187C50; +extern void func_80145934(void); +extern u8 D_80187DDC; +extern u8 D_80187DB8; +extern u8 D_80187D94; +extern u8 D_80187D70; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801871D4[]; +extern unsigned char D_80187204[]; +extern unsigned char D_80187254[]; +extern unsigned char D_80187284[]; +extern unsigned char D_801872B4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80187304[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801873CC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80187454[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018745C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A8E48; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A8E4C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018748C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80187534[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80187558[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80187548; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018756C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80187578[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80187588[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801875A0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80187590; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801875B4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801875D0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801875C0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801875E4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801875F8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018760C; +extern void (*D_80187634[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80187614; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80187680[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80187684[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187AE8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187AF8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A8E80; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187B20[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187B00; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187B10; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80187B60[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80187B68[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80187B34; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80187B74[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80187B44; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A8E88; +extern s32 D_801A8E94; +extern s32 D_801A8E98; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187BB0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187B84[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A8E90; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187E00[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187C20[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187EA4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187FF8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187E14; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188000[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80187E24; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187EB0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern M2C_UNK D_80187E34; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187EB0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80187E34)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187EB0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80187E44 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80187E44; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80187E44); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188008[])(void); + +void func_8015AD3C(void *a0) { + D_80188008[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_010/ov_SC06_010_after.c b/src/ov_SC06_010/ov_SC06_010_after.c index b10fb4898..db3f06f0b 100644 --- a/src/ov_SC06_010/ov_SC06_010_after.c +++ b/src/ov_SC06_010/ov_SC06_010_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_010/nonmatchings/ov_SC06_010_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018881C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018881C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018885C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018885C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80188860[])(void); - -void func_80155580(void *a0) { - D_80188860[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80188A54[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80188A54[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188CC4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188CC4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188CC4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188CD4[])(void); - -void func_80157544(void *a0) { - D_80188CD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B0EB8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B0EB8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B0EB8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80188CFC[])(void); -extern int D_801B0EB8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80188CFC[*(unsigned short *)((char *)param_1 + 2)](); - D_801B0EB8 = D_801B0EB8 - 1; - if (D_801B0EB8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188CDC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188CDC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188CEC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188CEC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188D3C[])(void); - -void func_80157DC4(void *a0) { - D_80188D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80188D44[])(void); - -void func_80157FC4(void *a0) { - D_80188D44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80188D10; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80188D10); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80188D50[])(void); - -void func_8015824C(void *a0) { - D_80188D50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80188D20; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188D20); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B0EC0; -extern s32 D_801B0ECC; -extern s32 D_801B0ED0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B0EC0 = 0; - D_801B0ECC = 1; - D_801B0ED0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B0EC0; -extern s32 D_801B0ECC; -extern s32 D_801B0ED0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B0EC0 = 0; - D_801B0ECC = 1; - D_801B0ED0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188D8C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188D8C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B0EC0; - -void func_80158BB0(void *arg0) { - if (D_801B0EC0 == 0) { - D_801B0EC0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B0ECC; -extern s32 D_80188D60[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B0ECC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188D60[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B0ED0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B0ED0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B0EC0; -extern s32 D_801B0EC8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B0EC0 == 4) { - D_801B0EC0 = 5; - } - if (D_801B0EC8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80188DC8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80188DC8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_801594E8); - - -extern void (*D_80188FDC[])(void); - -void func_80159698(void *a0) { - D_80188FDC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80188DFC)); - func_80028620(1, &(*(u8 *)&D_80188DFC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80188DFC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80189080[])(void); - -void func_80159968(void *a0) { - D_80189080[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801891D4[])(void); - -void func_80159B70(void *a0) { - D_801891D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188FF0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188FF0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801891DC[])(void); - -void func_8015A264(void *a0) { - D_801891DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80189000; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189000); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018908C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80189010; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018908C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189010); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018908C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189020 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80189020; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80189020); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801891E4[])(void); - -void func_8015AD3C(void *a0) { - D_801891E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8015444C.c b/src/ov_SC06_010/ov_SC06_010_jr_8015444C.c new file mode 100644 index 000000000..17061b923 --- /dev/null +++ b/src/ov_SC06_010/ov_SC06_010_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188F28; +extern u8 D_80188E98; +extern u8 D_80188E74; +extern u8 D_80188E50; +extern u8 D_80188F04; +extern u8 D_80188EE0; +extern u8 D_80188EBC; +extern u8 D_80188E2C; +extern void func_80145934(void); +extern u8 D_80188FB8; +extern u8 D_80188F94; +extern u8 D_80188F70; +extern u8 D_80188F4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801883B0[]; +extern unsigned char D_801883E0[]; +extern unsigned char D_80188430[]; +extern unsigned char D_80188460[]; +extern unsigned char D_80188490[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801884E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801885A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188630[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188638; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0E80; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0E84; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188668; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188710[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188734[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188724; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188748[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188754[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188764[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018877C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018876C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188790[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801887AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018879C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801887C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801887D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801887E8; +extern void (*D_80188810[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801887F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018881C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018881C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018885C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018885C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80188860[])(void); + +void func_80155580(void *a0) { + D_80188860[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80188A54[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80188A54[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188CC4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188CC4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188CC4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188CD4[])(void); + +void func_80157544(void *a0) { + D_80188CD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B0EB8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B0EB8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B0EB8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80188CFC[])(void); +extern int D_801B0EB8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80188CFC[*(unsigned short *)((char *)param_1 + 2)](); + D_801B0EB8 = D_801B0EB8 - 1; + if (D_801B0EB8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188CDC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188CDC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188CEC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188CEC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188D3C[])(void); + +void func_80157DC4(void *a0) { + D_80188D3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80188D44[])(void); + +void func_80157FC4(void *a0) { + D_80188D44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80188D10; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80188D10); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80188D50[])(void); + +void func_8015824C(void *a0) { + D_80188D50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80188D20; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188D20); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B0EC0; +extern s32 D_801B0ECC; +extern s32 D_801B0ED0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B0EC0 = 0; + D_801B0ECC = 1; + D_801B0ED0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B0EC0; +extern s32 D_801B0ECC; +extern s32 D_801B0ED0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B0EC0 = 0; + D_801B0ECC = 1; + D_801B0ED0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188D8C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188D8C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B0EC0; + +void func_80158BB0(void *arg0) { + if (D_801B0EC0 == 0) { + D_801B0EC0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B0ECC; +extern s32 D_80188D60[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B0ECC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188D60[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B0ED0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B0ED0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0EC0; +extern s32 D_801B0EC8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B0EC0 == 4) { + D_801B0EC0 = 5; + } + if (D_801B0EC8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80188DC8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80188DC8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_801594E8); + + +extern void (*D_80188FDC[])(void); + +void func_80159698(void *a0) { + D_80188FDC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80188DFC)); + func_80028620(1, &(*(u8 *)&D_80188DFC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80188DFC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80189080[])(void); + +void func_80159968(void *a0) { + D_80189080[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801891D4[])(void); + +void func_80159B70(void *a0) { + D_801891D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188FF0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188FF0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_010/nonmatchings/ov_SC06_010_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801891DC[])(void); + +void func_8015A264(void *a0) { + D_801891DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80189000; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80189000); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_010/ov_SC06_010_jr_8015A3C8.c b/src/ov_SC06_010/ov_SC06_010_jr_8015A3C8.c new file mode 100644 index 000000000..9b61a15a6 --- /dev/null +++ b/src/ov_SC06_010/ov_SC06_010_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188F28; +extern u8 D_80188E98; +extern u8 D_80188E74; +extern u8 D_80188E50; +extern u8 D_80188F04; +extern u8 D_80188EE0; +extern u8 D_80188EBC; +extern u8 D_80188E2C; +extern void func_80145934(void); +extern u8 D_80188FB8; +extern u8 D_80188F94; +extern u8 D_80188F70; +extern u8 D_80188F4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801883B0[]; +extern unsigned char D_801883E0[]; +extern unsigned char D_80188430[]; +extern unsigned char D_80188460[]; +extern unsigned char D_80188490[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801884E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801885A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188630[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188638; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0E80; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B0E84; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188668; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188710[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80188734[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80188724; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188748[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80188754[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80188764[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018877C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018876C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188790[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801887AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018879C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801887C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801887D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801887E8; +extern void (*D_80188810[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801887F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018885C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188860[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188CC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188CD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0EB8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188CFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188CDC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188CEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188D3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188D44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188D10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188D50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188D20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0EC0; +extern s32 D_801B0ECC; +extern s32 D_801B0ED0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188D8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188D60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0EC8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188FDC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188DFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80189080[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801891D4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188FF0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801891DC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80189000; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018908C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80189010; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018908C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80189010); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018908C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80189020 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80189020; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80189020); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801891E4[])(void); + +void func_8015AD3C(void *a0) { + D_801891E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_011/ov_SC06_011_after.c b/src/ov_SC06_011/ov_SC06_011_after.c index 3d07ca833..34e472f21 100644 --- a/src/ov_SC06_011/ov_SC06_011_after.c +++ b/src/ov_SC06_011/ov_SC06_011_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_011/nonmatchings/ov_SC06_011_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018227C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018227C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801822BC[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801822BC[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801822C0[])(void); - -void func_80155580(void *a0) { - D_801822C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801824B4[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801824B4[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182724 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182724[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182724[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182734[])(void); - -void func_80157544(void *a0) { - D_80182734[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801AAA68; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801AAA68 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801AAA68 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018275C[])(void); -extern int D_801AAA68; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018275C[*(unsigned short *)((char *)param_1 + 2)](); - D_801AAA68 = D_801AAA68 - 1; - if (D_801AAA68 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018273C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018273C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018274C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018274C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018279C[])(void); - -void func_80157DC4(void *a0) { - D_8018279C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801827A4[])(void); - -void func_80157FC4(void *a0) { - D_801827A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182770; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182770); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801827B0[])(void); - -void func_8015824C(void *a0) { - D_801827B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182780; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182780); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801AAA70; -extern s32 D_801AAA7C; -extern s32 D_801AAA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801AAA70 = 0; - D_801AAA7C = 1; - D_801AAA80 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801AAA70; -extern s32 D_801AAA7C; -extern s32 D_801AAA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801AAA70 = 0; - D_801AAA7C = 1; - D_801AAA80 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801827EC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801827EC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801AAA70; - -void func_80158BB0(void *arg0) { - if (D_801AAA70 == 0) { - D_801AAA70 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801AAA7C; -extern s32 D_801827C0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801AAA7C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801827C0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801AAA80; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801AAA80 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801AAA70; -extern s32 D_801AAA78; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801AAA70 == 4) { - D_801AAA70 = 5; - } - if (D_801AAA78 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182828[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182828; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_801594E8); - - -extern void (*D_80182A3C[])(void); - -void func_80159698(void *a0) { - D_80182A3C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018285C)); - func_80028620(1, &(*(u8 *)&D_8018285C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018285C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80182AE0[])(void); - -void func_80159968(void *a0) { - D_80182AE0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80182C34[])(void); - -void func_80159B70(void *a0) { - D_80182C34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80182A50; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182A50); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80182C3C[])(void); - -void func_8015A264(void *a0) { - D_80182C3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80182A60; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182A60); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80182AEC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80182A70; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80182AEC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182A70); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80182AEC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182A80 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182A80; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182A80); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80182C44[])(void); - -void func_8015AD3C(void *a0) { - D_80182C44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8015444C.c b/src/ov_SC06_011/ov_SC06_011_jr_8015444C.c new file mode 100644 index 000000000..c84944b8e --- /dev/null +++ b/src/ov_SC06_011/ov_SC06_011_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182988; +extern u8 D_801828F8; +extern u8 D_801828D4; +extern u8 D_801828B0; +extern u8 D_80182964; +extern u8 D_80182940; +extern u8 D_8018291C; +extern u8 D_8018288C; +extern void func_80145934(void); +extern u8 D_80182A18; +extern u8 D_801829F4; +extern u8 D_801829D0; +extern u8 D_801829AC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E10[]; +extern unsigned char D_80181E40[]; +extern unsigned char D_80181E90[]; +extern unsigned char D_80181EC0[]; +extern unsigned char D_80181EF0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F40[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182008[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182090[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182098; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801820C8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182170[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182194[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182184; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801821A8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801821B4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801821C4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801821DC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801821CC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801821F0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018220C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801821FC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182220[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182234[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182248; +extern void (*D_80182270[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182250; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018227C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018227C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801822BC[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801822BC[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801822C0[])(void); + +void func_80155580(void *a0) { + D_801822C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801824B4[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801824B4[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182724 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182724[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182724[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182734[])(void); + +void func_80157544(void *a0) { + D_80182734[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801AAA68; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801AAA68 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801AAA68 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018275C[])(void); +extern int D_801AAA68; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018275C[*(unsigned short *)((char *)param_1 + 2)](); + D_801AAA68 = D_801AAA68 - 1; + if (D_801AAA68 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018273C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018273C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018274C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018274C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018279C[])(void); + +void func_80157DC4(void *a0) { + D_8018279C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801827A4[])(void); + +void func_80157FC4(void *a0) { + D_801827A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182770; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182770); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801827B0[])(void); + +void func_8015824C(void *a0) { + D_801827B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182780; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182780); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801AAA70; +extern s32 D_801AAA7C; +extern s32 D_801AAA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801AAA70 = 0; + D_801AAA7C = 1; + D_801AAA80 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801AAA70; +extern s32 D_801AAA7C; +extern s32 D_801AAA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801AAA70 = 0; + D_801AAA7C = 1; + D_801AAA80 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801827EC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801827EC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801AAA70; + +void func_80158BB0(void *arg0) { + if (D_801AAA70 == 0) { + D_801AAA70 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801AAA7C; +extern s32 D_801827C0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801AAA7C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801827C0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801AAA80; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801AAA80 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801AAA70; +extern s32 D_801AAA78; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801AAA70 == 4) { + D_801AAA70 = 5; + } + if (D_801AAA78 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182828[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182828; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_801594E8); + + +extern void (*D_80182A3C[])(void); + +void func_80159698(void *a0) { + D_80182A3C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018285C)); + func_80028620(1, &(*(u8 *)&D_8018285C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018285C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80182AE0[])(void); + +void func_80159968(void *a0) { + D_80182AE0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80182C34[])(void); + +void func_80159B70(void *a0) { + D_80182C34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80182A50; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182A50); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80182C3C[])(void); + +void func_8015A264(void *a0) { + D_80182C3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80182A60; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182A60); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_011/ov_SC06_011_jr_8015A3C8.c b/src/ov_SC06_011/ov_SC06_011_jr_8015A3C8.c new file mode 100644 index 000000000..c4d55a745 --- /dev/null +++ b/src/ov_SC06_011/ov_SC06_011_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182988; +extern u8 D_801828F8; +extern u8 D_801828D4; +extern u8 D_801828B0; +extern u8 D_80182964; +extern u8 D_80182940; +extern u8 D_8018291C; +extern u8 D_8018288C; +extern void func_80145934(void); +extern u8 D_80182A18; +extern u8 D_801829F4; +extern u8 D_801829D0; +extern u8 D_801829AC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80181E10[]; +extern unsigned char D_80181E40[]; +extern unsigned char D_80181E90[]; +extern unsigned char D_80181EC0[]; +extern unsigned char D_80181EF0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181F40[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80182008[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80182090[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80182098; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801AAA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801AAA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801820C8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80182170[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80182194[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80182184; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801821A8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801821B4[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801821C4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801821DC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801821CC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801821F0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018220C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801821FC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80182220[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80182234[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80182248; +extern void (*D_80182270[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80182250; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801822BC[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801822C0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182724[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182734[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801AAA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018275C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018273C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018274C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018279C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801827A4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182770; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801827B0[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182780; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801AAA70; +extern s32 D_801AAA7C; +extern s32 D_801AAA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801827EC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801827C0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801AAA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80182A3C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018285C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80182AE0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182C34[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182A50; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80182C3C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182A60; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80182AEC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80182A70; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80182AEC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182A70); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80182AEC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182A80 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182A80; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182A80); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80182C44[])(void); + +void func_8015AD3C(void *a0) { + D_80182C44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_013/ov_SC06_013_after.c b/src/ov_SC06_013/ov_SC06_013_after.c index bfefbd74d..33ecbb0b4 100644 --- a/src/ov_SC06_013/ov_SC06_013_after.c +++ b/src/ov_SC06_013/ov_SC06_013_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_013/nonmatchings/ov_SC06_013_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801809F8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801809F8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80180A38[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80180A38[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80180A3C[])(void); - -void func_80155580(void *a0) { - D_80180A3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180C30[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180C30[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180EA0 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180EA0[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180EA0[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180EB0[])(void); - -void func_80157544(void *a0) { - D_80180EB0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80199920; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80199920 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80199920 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180ED8[])(void); -extern int D_80199920; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180ED8[*(unsigned short *)((char *)param_1 + 2)](); - D_80199920 = D_80199920 - 1; - if (D_80199920 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180EB8; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180EB8); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180EC8; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180EC8); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180F18[])(void); - -void func_80157DC4(void *a0) { - D_80180F18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180F20[])(void); - -void func_80157FC4(void *a0) { - D_80180F20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180EEC; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180EEC); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180F2C[])(void); - -void func_8015824C(void *a0) { - D_80180F2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180EFC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180EFC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80199928; -extern s32 D_80199934; -extern s32 D_80199938; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80199928 = 0; - D_80199934 = 1; - D_80199938 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80199928; -extern s32 D_80199934; -extern s32 D_80199938; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80199928 = 0; - D_80199934 = 1; - D_80199938 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180F68[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180F68[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80199928; - -void func_80158BB0(void *arg0) { - if (D_80199928 == 0) { - D_80199928 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80199934; -extern s32 D_80180F3C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80199934; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180F3C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80199938; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80199938 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80199928; -extern s32 D_80199930; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80199928 == 4) { - D_80199928 = 5; - } - if (D_80199930 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180FA4[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180FA4; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_801594E8); - - -extern void (*D_801811B8[])(void); - -void func_80159698(void *a0) { - D_801811B8[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180FD8)); - func_80028620(1, &(*(u8 *)&D_80180FD8) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180FD8) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018125C[])(void); - -void func_80159968(void *a0) { - D_8018125C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801813B0[])(void); - -void func_80159B70(void *a0) { - D_801813B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801811CC; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801811CC); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801813B8[])(void); - -void func_8015A264(void *a0) { - D_801813B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801811DC; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801811DC); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181268[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern char D_801811EC[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181268[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801811EC)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181268[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801811FC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801811FC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801811FC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801813C0[])(void); - -void func_8015AD3C(void *a0) { - D_801813C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8015444C.c b/src/ov_SC06_013/ov_SC06_013_jr_8015444C.c new file mode 100644 index 000000000..c287ed422 --- /dev/null +++ b/src/ov_SC06_013/ov_SC06_013_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181104; +extern u8 D_80181074; +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_801810E0; +extern u8 D_801810BC; +extern u8 D_80181098; +extern u8 D_80181008; +extern void func_80145934(void); +extern u8 D_80181194; +extern u8 D_80181170; +extern u8 D_8018114C; +extern u8 D_80181128; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018058C[]; +extern unsigned char D_801805BC[]; +extern unsigned char D_8018060C[]; +extern unsigned char D_8018063C[]; +extern unsigned char D_8018066C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180784[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018080C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180814; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801998E8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801998EC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180844; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801808EC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180910[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180900; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180924[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180930[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180940[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180958[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180948; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018096C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180988[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180978; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018099C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809B0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801809C4; +extern void (*D_801809EC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801809CC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801809F8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801809F8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80180A38[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80180A38[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80180A3C[])(void); + +void func_80155580(void *a0) { + D_80180A3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180C30[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180C30[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180EA0 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EA0[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180EA0[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180EB0[])(void); + +void func_80157544(void *a0) { + D_80180EB0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80199920; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80199920 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80199920 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180ED8[])(void); +extern int D_80199920; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180ED8[*(unsigned short *)((char *)param_1 + 2)](); + D_80199920 = D_80199920 - 1; + if (D_80199920 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EB8; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180EB8); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180EC8; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180EC8); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180F18[])(void); + +void func_80157DC4(void *a0) { + D_80180F18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180F20[])(void); + +void func_80157FC4(void *a0) { + D_80180F20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180EEC; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180EEC); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180F2C[])(void); + +void func_8015824C(void *a0) { + D_80180F2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180EFC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180EFC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80199928; +extern s32 D_80199934; +extern s32 D_80199938; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80199928 = 0; + D_80199934 = 1; + D_80199938 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80199928; +extern s32 D_80199934; +extern s32 D_80199938; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80199928 = 0; + D_80199934 = 1; + D_80199938 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180F68[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180F68[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80199928; + +void func_80158BB0(void *arg0) { + if (D_80199928 == 0) { + D_80199928 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80199934; +extern s32 D_80180F3C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80199934; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180F3C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80199938; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80199938 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80199928; +extern s32 D_80199930; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80199928 == 4) { + D_80199928 = 5; + } + if (D_80199930 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180FA4[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180FA4; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_801594E8); + + +extern void (*D_801811B8[])(void); + +void func_80159698(void *a0) { + D_801811B8[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180FD8)); + func_80028620(1, &(*(u8 *)&D_80180FD8) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180FD8) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018125C[])(void); + +void func_80159968(void *a0) { + D_8018125C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801813B0[])(void); + +void func_80159B70(void *a0) { + D_801813B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801811CC; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801811CC); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801813B8[])(void); + +void func_8015A264(void *a0) { + D_801813B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801811DC; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801811DC); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_013/ov_SC06_013_jr_8015A3C8.c b/src/ov_SC06_013/ov_SC06_013_jr_8015A3C8.c new file mode 100644 index 000000000..81413e62f --- /dev/null +++ b/src/ov_SC06_013/ov_SC06_013_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80181104; +extern u8 D_80181074; +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_801810E0; +extern u8 D_801810BC; +extern u8 D_80181098; +extern u8 D_80181008; +extern void func_80145934(void); +extern u8 D_80181194; +extern u8 D_80181170; +extern u8 D_8018114C; +extern u8 D_80181128; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018058C[]; +extern unsigned char D_801805BC[]; +extern unsigned char D_8018060C[]; +extern unsigned char D_8018063C[]; +extern unsigned char D_8018066C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801806BC[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180784[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018080C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80180814; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801998E8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801998EC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180844; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801808EC[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80180910[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80180900; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80180924[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80180930[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80180940[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180958[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180948; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018096C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180988[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180978; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018099C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801809B0[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801809C4; +extern void (*D_801809EC[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801809CC; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80180A38[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80180A3C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180EA0[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180EB0[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80199920; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180ED8[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180EB8; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180EC8; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180F18[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180F20[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180EEC; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180F2C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180EFC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80199928; +extern s32 D_80199934; +extern s32 D_80199938; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180F68[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180F3C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80199930; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801811B8[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180FD8[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018125C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801813B0[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801811CC; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801813B8[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801811DC; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181268[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern char D_801811EC[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181268[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801811EC)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181268[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801811FC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801811FC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801811FC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801813C0[])(void); + +void func_8015AD3C(void *a0) { + D_801813C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_014/ov_SC06_014_after.c b/src/ov_SC06_014/ov_SC06_014_after.c index 202bd8109..233ef9b42 100644 --- a/src/ov_SC06_014/ov_SC06_014_after.c +++ b/src/ov_SC06_014/ov_SC06_014_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_014/nonmatchings/ov_SC06_014_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80181D5C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80181D5C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80181D9C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80181D9C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80181DA0[])(void); - -void func_80155580(void *a0) { - D_80181DA0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80181F94[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80181F94[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182204 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80182204[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80182204[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80182214[])(void); - -void func_80157544(void *a0) { - D_80182214[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A0310; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A0310 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A0310 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018223C[])(void); -extern int D_801A0310; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018223C[*(unsigned short *)((char *)param_1 + 2)](); - D_801A0310 = D_801A0310 - 1; - if (D_801A0310 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018221C; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018221C); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018222C; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018222C); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018227C[])(void); - -void func_80157DC4(void *a0) { - D_8018227C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80182284[])(void); - -void func_80157FC4(void *a0) { - D_80182284[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80182250; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80182250); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80182290[])(void); - -void func_8015824C(void *a0) { - D_80182290[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80182260; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182260); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A0318; -extern s32 D_801A0324; -extern s32 D_801A0328; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A0318 = 0; - D_801A0324 = 1; - D_801A0328 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A0318; -extern s32 D_801A0324; -extern s32 D_801A0328; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A0318 = 0; - D_801A0324 = 1; - D_801A0328 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801822CC[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801822CC[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A0318; - -void func_80158BB0(void *arg0) { - if (D_801A0318 == 0) { - D_801A0318 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A0324; -extern s32 D_801822A0[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A0324; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801822A0[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A0328; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A0328 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A0318; -extern s32 D_801A0320; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A0318 == 4) { - D_801A0318 = 5; - } - if (D_801A0320 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80182308[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80182308; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_801594E8); - - -extern void (*D_8018251C[])(void); - -void func_80159698(void *a0) { - D_8018251C[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018233C)); - func_80028620(1, &(*(u8 *)&D_8018233C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018233C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801825C0[])(void); - -void func_80159968(void *a0) { - D_801825C0[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80182714[])(void); - -void func_80159B70(void *a0) { - D_80182714[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80182530; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182530); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018271C[])(void); - -void func_8015A264(void *a0) { - D_8018271C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80182540; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182540); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801825CC[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80182550; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801825CC[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182550); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801825CC[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182560 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80182560; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80182560); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80182724[])(void); - -void func_8015AD3C(void *a0) { - D_80182724[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8015444C.c b/src/ov_SC06_014/ov_SC06_014_jr_8015444C.c new file mode 100644 index 000000000..c8a194b1c --- /dev/null +++ b/src/ov_SC06_014/ov_SC06_014_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182468; +extern u8 D_801823D8; +extern u8 D_801823B4; +extern u8 D_80182390; +extern u8 D_80182444; +extern u8 D_80182420; +extern u8 D_801823FC; +extern u8 D_8018236C; +extern void func_80145934(void); +extern u8 D_801824F8; +extern u8 D_801824D4; +extern u8 D_801824B0; +extern u8 D_8018248C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818F0[]; +extern unsigned char D_80181920[]; +extern unsigned char D_80181970[]; +extern unsigned char D_801819A0[]; +extern unsigned char D_801819D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A02D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A02DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181D28; +extern void (*D_80181D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80181D5C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80181D5C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80181D9C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80181D9C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80181DA0[])(void); + +void func_80155580(void *a0) { + D_80181DA0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80181F94[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80181F94[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80182204 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80182204[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80182204[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80182214[])(void); + +void func_80157544(void *a0) { + D_80182214[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A0310; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A0310 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A0310 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018223C[])(void); +extern int D_801A0310; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018223C[*(unsigned short *)((char *)param_1 + 2)](); + D_801A0310 = D_801A0310 - 1; + if (D_801A0310 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018221C; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018221C); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018222C; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018222C); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018227C[])(void); + +void func_80157DC4(void *a0) { + D_8018227C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80182284[])(void); + +void func_80157FC4(void *a0) { + D_80182284[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80182250; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80182250); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80182290[])(void); + +void func_8015824C(void *a0) { + D_80182290[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80182260; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80182260); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A0318; +extern s32 D_801A0324; +extern s32 D_801A0328; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A0318 = 0; + D_801A0324 = 1; + D_801A0328 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A0318; +extern s32 D_801A0324; +extern s32 D_801A0328; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A0318 = 0; + D_801A0324 = 1; + D_801A0328 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801822CC[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801822CC[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A0318; + +void func_80158BB0(void *arg0) { + if (D_801A0318 == 0) { + D_801A0318 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A0324; +extern s32 D_801822A0[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A0324; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801822A0[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A0328; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A0328 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0318; +extern s32 D_801A0320; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A0318 == 4) { + D_801A0318 = 5; + } + if (D_801A0320 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80182308[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80182308; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_801594E8); + + +extern void (*D_8018251C[])(void); + +void func_80159698(void *a0) { + D_8018251C[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018233C)); + func_80028620(1, &(*(u8 *)&D_8018233C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018233C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801825C0[])(void); + +void func_80159968(void *a0) { + D_801825C0[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80182714[])(void); + +void func_80159B70(void *a0) { + D_80182714[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80182530; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80182530); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_014/nonmatchings/ov_SC06_014_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018271C[])(void); + +void func_8015A264(void *a0) { + D_8018271C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80182540; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80182540); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_014/ov_SC06_014_jr_8015A3C8.c b/src/ov_SC06_014/ov_SC06_014_jr_8015A3C8.c new file mode 100644 index 000000000..b6d11a853 --- /dev/null +++ b/src/ov_SC06_014/ov_SC06_014_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80182468; +extern u8 D_801823D8; +extern u8 D_801823B4; +extern u8 D_80182390; +extern u8 D_80182444; +extern u8 D_80182420; +extern u8 D_801823FC; +extern u8 D_8018236C; +extern void func_80145934(void); +extern u8 D_801824F8; +extern u8 D_801824D4; +extern u8 D_801824B0; +extern u8 D_8018248C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801818F0[]; +extern unsigned char D_80181920[]; +extern unsigned char D_80181970[]; +extern unsigned char D_801819A0[]; +extern unsigned char D_801819D0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80181A20[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80181AE8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80181B70[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80181B78; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A02D8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A02DC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80181BA8; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80181C50[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80181C74[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80181C64; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80181C88[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80181C94[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80181CA4[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80181CBC[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80181CAC; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80181CD0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80181CEC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80181CDC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80181D00[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80181D14[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80181D28; +extern void (*D_80181D50[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80181D30; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80181D9C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80181DA0[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80182204[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80182214[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A0310; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018223C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018221C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018222C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018227C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80182284[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80182250; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80182290[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80182260; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A0318; +extern s32 D_801A0324; +extern s32 D_801A0328; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801822CC[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801822A0[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A0320; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018251C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018233C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801825C0[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80182714[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80182530; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018271C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80182540; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801825CC[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80182550; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801825CC[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80182550); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801825CC[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80182560 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80182560; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80182560); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80182724[])(void); + +void func_8015AD3C(void *a0) { + D_80182724[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_015/ov_SC06_015_after.c b/src/ov_SC06_015/ov_SC06_015_after.c index 42f9dc671..7f3101014 100644 --- a/src/ov_SC06_015/ov_SC06_015_after.c +++ b/src/ov_SC06_015/ov_SC06_015_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_015/nonmatchings/ov_SC06_015_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801808B4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801808B4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801808F4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801808F4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801808F8[])(void); - -void func_80155580(void *a0) { - D_801808F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180AEC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180AEC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180D5C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180D5C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180D5C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180D6C[])(void); - -void func_80157544(void *a0) { - D_80180D6C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801936F0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801936F0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801936F0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80180D94[])(void); -extern int D_801936F0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80180D94[*(unsigned short *)((char *)param_1 + 2)](); - D_801936F0 = D_801936F0 - 1; - if (D_801936F0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180D74; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180D74); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80180D84; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180D84); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180DD4[])(void); - -void func_80157DC4(void *a0) { - D_80180DD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180DDC[])(void); - -void func_80157FC4(void *a0) { - D_80180DDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80180DA8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80180DA8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180DE8[])(void); - -void func_8015824C(void *a0) { - D_80180DE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180DB8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180DB8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801936F8; -extern s32 D_80193704; -extern s32 D_80193708; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801936F8 = 0; - D_80193704 = 1; - D_80193708 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801936F8; -extern s32 D_80193704; -extern s32 D_80193708; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801936F8 = 0; - D_80193704 = 1; - D_80193708 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180E24[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180E24[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801936F8; - -void func_80158BB0(void *arg0) { - if (D_801936F8 == 0) { - D_801936F8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_80193704; -extern s32 D_80180DF8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_80193704; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180DF8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80193708; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80193708 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801936F8; -extern s32 D_80193700; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801936F8 == 4) { - D_801936F8 = 5; - } - if (D_80193700 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80180E60[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80180E60; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_801594E8); - - -extern void (*D_80181074[])(void); - -void func_80159698(void *a0) { - D_80181074[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80180E94)); - func_80028620(1, &(*(u8 *)&D_80180E94) + 0x10); - func_80028620(2, &(*(u8 *)&D_80180E94) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80181118[])(void); - -void func_80159968(void *a0) { - D_80181118[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018126C[])(void); - -void func_80159B70(void *a0) { - D_8018126C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80181088; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181088); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80181274[])(void); - -void func_8015A264(void *a0) { - D_80181274[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80181098; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181098); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80181124[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801810A8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80181124[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801810A8)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80181124[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801810B8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801810B8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801810B8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018127C[])(void); - -void func_8015AD3C(void *a0) { - D_8018127C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8015444C.c b/src/ov_SC06_015/ov_SC06_015_jr_8015444C.c new file mode 100644 index 000000000..374b41b82 --- /dev/null +++ b/src/ov_SC06_015/ov_SC06_015_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180FC0; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180EE8; +extern u8 D_80180F9C; +extern u8 D_80180F78; +extern u8 D_80180F54; +extern u8 D_80180EC4; +extern void func_80145934(void); +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_80181008; +extern u8 D_80180FE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180448[]; +extern unsigned char D_80180478[]; +extern unsigned char D_801804C8[]; +extern unsigned char D_801804F8[]; +extern unsigned char D_80180528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801806C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801806D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801936B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801936BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801807A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801807CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801807BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018086C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180880; +extern void (*D_801808A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801808B4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801808B4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801808F4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801808F4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801808F8[])(void); + +void func_80155580(void *a0) { + D_801808F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180AEC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180AEC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180D5C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D5C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180D5C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180D6C[])(void); + +void func_80157544(void *a0) { + D_80180D6C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801936F0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801936F0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801936F0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80180D94[])(void); +extern int D_801936F0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80180D94[*(unsigned short *)((char *)param_1 + 2)](); + D_801936F0 = D_801936F0 - 1; + if (D_801936F0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D74; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180D74); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80180D84; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80180D84); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180DD4[])(void); + +void func_80157DC4(void *a0) { + D_80180DD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180DDC[])(void); + +void func_80157FC4(void *a0) { + D_80180DDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80180DA8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80180DA8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180DE8[])(void); + +void func_8015824C(void *a0) { + D_80180DE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180DB8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180DB8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801936F8; +extern s32 D_80193704; +extern s32 D_80193708; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801936F8 = 0; + D_80193704 = 1; + D_80193708 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801936F8; +extern s32 D_80193704; +extern s32 D_80193708; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801936F8 = 0; + D_80193704 = 1; + D_80193708 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180E24[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180E24[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801936F8; + +void func_80158BB0(void *arg0) { + if (D_801936F8 == 0) { + D_801936F8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_80193704; +extern s32 D_80180DF8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_80193704; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180DF8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80193708; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80193708 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801936F8; +extern s32 D_80193700; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801936F8 == 4) { + D_801936F8 = 5; + } + if (D_80193700 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80180E60[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80180E60; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_801594E8); + + +extern void (*D_80181074[])(void); + +void func_80159698(void *a0) { + D_80181074[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80180E94)); + func_80028620(1, &(*(u8 *)&D_80180E94) + 0x10); + func_80028620(2, &(*(u8 *)&D_80180E94) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80181118[])(void); + +void func_80159968(void *a0) { + D_80181118[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018126C[])(void); + +void func_80159B70(void *a0) { + D_8018126C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80181088; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80181088); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_015/nonmatchings/ov_SC06_015_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80181274[])(void); + +void func_8015A264(void *a0) { + D_80181274[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80181098; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80181098); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_015/ov_SC06_015_jr_8015A3C8.c b/src/ov_SC06_015/ov_SC06_015_jr_8015A3C8.c new file mode 100644 index 000000000..c14d55520 --- /dev/null +++ b/src/ov_SC06_015/ov_SC06_015_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80180FC0; +extern u8 D_80180F30; +extern u8 D_80180F0C; +extern u8 D_80180EE8; +extern u8 D_80180F9C; +extern u8 D_80180F78; +extern u8 D_80180F54; +extern u8 D_80180EC4; +extern void func_80145934(void); +extern u8 D_80181050; +extern u8 D_8018102C; +extern u8 D_80181008; +extern u8 D_80180FE4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80180448[]; +extern unsigned char D_80180478[]; +extern unsigned char D_801804C8[]; +extern unsigned char D_801804F8[]; +extern unsigned char D_80180528[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80180578[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80180640[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801806C8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801806D0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801936B8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801936BC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80180700; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801807A8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801807CC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801807BC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801807E0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801807EC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801807FC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80180814[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80180804; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80180828[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80180844[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80180834; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80180858[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018086C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80180880; +extern void (*D_801808A8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80180888; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801808F4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801808F8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180D5C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180D6C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801936F0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80180D94[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180D74; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80180D84; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180DD4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180DDC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80180DA8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180DE8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180DB8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801936F8; +extern s32 D_80193704; +extern s32 D_80193708; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180E24[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180DF8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80193700; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80181074[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80180E94[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80181118[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018126C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80181088; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80181274[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80181098; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80181124[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801810A8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80181124[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801810A8)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80181124[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801810B8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801810B8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801810B8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018127C[])(void); + +void func_8015AD3C(void *a0) { + D_8018127C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_016/ov_SC06_016_after.c b/src/ov_SC06_016/ov_SC06_016_after.c index 97870fb1d..baf13bad9 100644 --- a/src/ov_SC06_016/ov_SC06_016_after.c +++ b/src/ov_SC06_016/ov_SC06_016_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_016/nonmatchings/ov_SC06_016_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186CC4[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186CC4[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186D04[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186D04[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186D08[])(void); - -void func_80155580(void *a0) { - D_80186D08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186EFC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186EFC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018716C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018716C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018716C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018717C[])(void); - -void func_80157544(void *a0) { - D_8018717C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019E4C0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019E4C0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019E4C0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801871A4[])(void); -extern int D_8019E4C0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801871A4[*(unsigned short *)((char *)param_1 + 2)](); - D_8019E4C0 = D_8019E4C0 - 1; - if (D_8019E4C0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187184; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187184); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187194; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187194); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801871E4[])(void); - -void func_80157DC4(void *a0) { - D_801871E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801871EC[])(void); - -void func_80157FC4(void *a0) { - D_801871EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801871B8; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801871B8); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801871F8[])(void); - -void func_8015824C(void *a0) { - D_801871F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801871C8; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801871C8); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019E4C8; -extern s32 D_8019E4D4; -extern s32 D_8019E4D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019E4C8 = 0; - D_8019E4D4 = 1; - D_8019E4D8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019E4C8; -extern s32 D_8019E4D4; -extern s32 D_8019E4D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019E4C8 = 0; - D_8019E4D4 = 1; - D_8019E4D8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187234[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187234[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019E4C8; - -void func_80158BB0(void *arg0) { - if (D_8019E4C8 == 0) { - D_8019E4C8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019E4D4; -extern s32 D_80187208[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019E4D4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187208[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019E4D8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019E4D8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019E4C8; -extern s32 D_8019E4D0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019E4C8 == 4) { - D_8019E4C8 = 5; - } - if (D_8019E4D0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187270[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187270; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_801594E8); - - -extern void (*D_80187484[])(void); - -void func_80159698(void *a0) { - D_80187484[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801872A4)); - func_80028620(1, &(*(u8 *)&D_801872A4) + 0x10); - func_80028620(2, &(*(u8 *)&D_801872A4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187528[])(void); - -void func_80159968(void *a0) { - D_80187528[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018767C[])(void); - -void func_80159B70(void *a0) { - D_8018767C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187498; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187498); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187684[])(void); - -void func_8015A264(void *a0) { - D_80187684[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801874A8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801874A8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187534[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801874B8; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187534[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801874B8); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187534[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801874C8 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801874C8; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801874C8); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018768C[])(void); - -void func_8015AD3C(void *a0) { - D_8018768C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8015444C.c b/src/ov_SC06_016/ov_SC06_016_jr_8015444C.c new file mode 100644 index 000000000..fd9e1df87 --- /dev/null +++ b/src/ov_SC06_016/ov_SC06_016_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801873D0; +extern u8 D_80187340; +extern u8 D_8018731C; +extern u8 D_801872F8; +extern u8 D_801873AC; +extern u8 D_80187388; +extern u8 D_80187364; +extern u8 D_801872D4; +extern void func_80145934(void); +extern u8 D_80187460; +extern u8 D_8018743C; +extern u8 D_80187418; +extern u8 D_801873F4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186858[]; +extern unsigned char D_80186888[]; +extern unsigned char D_801868D8[]; +extern unsigned char D_80186908[]; +extern unsigned char D_80186938[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186988[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186A50[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186AD8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186AE0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019E488; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019E48C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186B10; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186BB8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186BDC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186BCC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186BF0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186BFC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186C0C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186C24[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186C14; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186C38[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186C54[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186C44; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186C68[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186C7C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186C90; +extern void (*D_80186CB8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186C98; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186CC4[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186CC4[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186D04[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186D04[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186D08[])(void); + +void func_80155580(void *a0) { + D_80186D08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186EFC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186EFC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018716C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018716C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018716C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018717C[])(void); + +void func_80157544(void *a0) { + D_8018717C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019E4C0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019E4C0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019E4C0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801871A4[])(void); +extern int D_8019E4C0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801871A4[*(unsigned short *)((char *)param_1 + 2)](); + D_8019E4C0 = D_8019E4C0 - 1; + if (D_8019E4C0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187184; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187184); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187194; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187194); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801871E4[])(void); + +void func_80157DC4(void *a0) { + D_801871E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801871EC[])(void); + +void func_80157FC4(void *a0) { + D_801871EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801871B8; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801871B8); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801871F8[])(void); + +void func_8015824C(void *a0) { + D_801871F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801871C8; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801871C8); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019E4C8; +extern s32 D_8019E4D4; +extern s32 D_8019E4D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019E4C8 = 0; + D_8019E4D4 = 1; + D_8019E4D8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019E4C8; +extern s32 D_8019E4D4; +extern s32 D_8019E4D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019E4C8 = 0; + D_8019E4D4 = 1; + D_8019E4D8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187234[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187234[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019E4C8; + +void func_80158BB0(void *arg0) { + if (D_8019E4C8 == 0) { + D_8019E4C8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019E4D4; +extern s32 D_80187208[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019E4D4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187208[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019E4D8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019E4D8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019E4C8; +extern s32 D_8019E4D0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019E4C8 == 4) { + D_8019E4C8 = 5; + } + if (D_8019E4D0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187270[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187270; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_801594E8); + + +extern void (*D_80187484[])(void); + +void func_80159698(void *a0) { + D_80187484[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801872A4)); + func_80028620(1, &(*(u8 *)&D_801872A4) + 0x10); + func_80028620(2, &(*(u8 *)&D_801872A4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187528[])(void); + +void func_80159968(void *a0) { + D_80187528[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018767C[])(void); + +void func_80159B70(void *a0) { + D_8018767C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187498; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187498); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187684[])(void); + +void func_8015A264(void *a0) { + D_80187684[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801874A8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801874A8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8015A3C8.c b/src/ov_SC06_016/ov_SC06_016_jr_8015A3C8.c new file mode 100644 index 000000000..425c19d7a --- /dev/null +++ b/src/ov_SC06_016/ov_SC06_016_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801873D0; +extern u8 D_80187340; +extern u8 D_8018731C; +extern u8 D_801872F8; +extern u8 D_801873AC; +extern u8 D_80187388; +extern u8 D_80187364; +extern u8 D_801872D4; +extern void func_80145934(void); +extern u8 D_80187460; +extern u8 D_8018743C; +extern u8 D_80187418; +extern u8 D_801873F4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186858[]; +extern unsigned char D_80186888[]; +extern unsigned char D_801868D8[]; +extern unsigned char D_80186908[]; +extern unsigned char D_80186938[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186988[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186A50[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186AD8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186AE0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019E488; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019E48C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186B10; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186BB8[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186BDC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186BCC; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186BF0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186BFC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186C0C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186C24[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186C14; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186C38[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186C54[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186C44; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186C68[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186C7C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186C90; +extern void (*D_80186CB8[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186C98; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186D04[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186D08[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018716C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018717C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019E4C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801871A4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187184; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187194; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801871E4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801871EC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801871B8; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801871F8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801871C8; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019E4C8; +extern s32 D_8019E4D4; +extern s32 D_8019E4D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187234[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187208[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019E4D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187484[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801872A4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187528[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018767C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187498; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187684[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801874A8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187534[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801874B8; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187534[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801874B8); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187534[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801874C8 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801874C8; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801874C8); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018768C[])(void); + +void func_8015AD3C(void *a0) { + D_8018768C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_018/ov_SC06_018_after.c b/src/ov_SC06_018/ov_SC06_018_after.c index 3fc53b6db..c7d941fdc 100644 --- a/src/ov_SC06_018/ov_SC06_018_after.c +++ b/src/ov_SC06_018/ov_SC06_018_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_018/nonmatchings/ov_SC06_018_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80195400[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80195400[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80195440[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80195440[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80195444[])(void); - -void func_80155580(void *a0) { - D_80195444[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80195638[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80195638[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801958A8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801958A8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801958A8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801958B8[])(void); - -void func_80157544(void *a0) { - D_801958B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801D3DA8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801D3DA8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801D3DA8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801958E0[])(void); -extern int D_801D3DA8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801958E0[*(unsigned short *)((char *)param_1 + 2)](); - D_801D3DA8 = D_801D3DA8 - 1; - if (D_801D3DA8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801958C0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801958C0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801958D0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801958D0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80195920[])(void); - -void func_80157DC4(void *a0) { - D_80195920[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80195928[])(void); - -void func_80157FC4(void *a0) { - D_80195928[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801958F4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801958F4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80195934[])(void); - -void func_8015824C(void *a0) { - D_80195934[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80195904; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80195904); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801D3DB0; -extern s32 D_801D3DBC; -extern s32 D_801D3DC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801D3DB0 = 0; - D_801D3DBC = 1; - D_801D3DC0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801D3DB0; -extern s32 D_801D3DBC; -extern s32 D_801D3DC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801D3DB0 = 0; - D_801D3DBC = 1; - D_801D3DC0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80195970[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80195970[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801D3DB0; - -void func_80158BB0(void *arg0) { - if (D_801D3DB0 == 0) { - D_801D3DB0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801D3DBC; -extern s32 D_80195944[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801D3DBC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80195944[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801D3DC0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801D3DC0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801D3DB0; -extern s32 D_801D3DB8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801D3DB0 == 4) { - D_801D3DB0 = 5; - } - if (D_801D3DB8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801959AC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801959AC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_801594E8); - - -extern void (*D_80195BC0[])(void); - -void func_80159698(void *a0) { - D_80195BC0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801959E0)); - func_80028620(1, &(*(u8 *)&D_801959E0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801959E0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80195C64[])(void); - -void func_80159968(void *a0) { - D_80195C64[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80195DB8[])(void); - -void func_80159B70(void *a0) { - D_80195DB8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80195BD4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80195BD4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80195DC0[])(void); - -void func_8015A264(void *a0) { - D_80195DC0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80195BE4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80195BE4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80195C70[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80195BF4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80195C70[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80195BF4); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80195C70[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80195C04 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80195C04; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80195C04); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80195DC8[])(void); - -void func_8015AD3C(void *a0) { - D_80195DC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8015444C.c b/src/ov_SC06_018/ov_SC06_018_jr_8015444C.c new file mode 100644 index 000000000..68e3f5015 --- /dev/null +++ b/src/ov_SC06_018/ov_SC06_018_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80195B0C; +extern u8 D_80195A7C; +extern u8 D_80195A58; +extern u8 D_80195A34; +extern u8 D_80195AE8; +extern u8 D_80195AC4; +extern u8 D_80195AA0; +extern u8 D_80195A10; +extern void func_80145934(void); +extern u8 D_80195B9C; +extern u8 D_80195B78; +extern u8 D_80195B54; +extern u8 D_80195B30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194F94[]; +extern unsigned char D_80194FC4[]; +extern unsigned char D_80195014[]; +extern unsigned char D_80195044[]; +extern unsigned char D_80195074[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801950C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8019518C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80195214[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019521C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3D70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3D74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8019524C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801952F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195318[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195308; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019532C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195338[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195348[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80195360[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80195350; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80195374[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80195390[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80195380; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801953A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801953B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801953CC; +extern void (*D_801953F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801953D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80195400[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80195400[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80195440[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80195440[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80195444[])(void); + +void func_80155580(void *a0) { + D_80195444[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80195638[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80195638[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801958A8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801958A8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801958A8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801958B8[])(void); + +void func_80157544(void *a0) { + D_801958B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801D3DA8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801D3DA8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801D3DA8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801958E0[])(void); +extern int D_801D3DA8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801958E0[*(unsigned short *)((char *)param_1 + 2)](); + D_801D3DA8 = D_801D3DA8 - 1; + if (D_801D3DA8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801958C0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801958C0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801958D0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801958D0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80195920[])(void); + +void func_80157DC4(void *a0) { + D_80195920[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80195928[])(void); + +void func_80157FC4(void *a0) { + D_80195928[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801958F4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801958F4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80195934[])(void); + +void func_8015824C(void *a0) { + D_80195934[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80195904; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80195904); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801D3DB0; +extern s32 D_801D3DBC; +extern s32 D_801D3DC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801D3DB0 = 0; + D_801D3DBC = 1; + D_801D3DC0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801D3DB0; +extern s32 D_801D3DBC; +extern s32 D_801D3DC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801D3DB0 = 0; + D_801D3DBC = 1; + D_801D3DC0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80195970[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80195970[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801D3DB0; + +void func_80158BB0(void *arg0) { + if (D_801D3DB0 == 0) { + D_801D3DB0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801D3DBC; +extern s32 D_80195944[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801D3DBC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80195944[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801D3DC0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801D3DC0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801D3DB0; +extern s32 D_801D3DB8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801D3DB0 == 4) { + D_801D3DB0 = 5; + } + if (D_801D3DB8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801959AC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801959AC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_801594E8); + + +extern void (*D_80195BC0[])(void); + +void func_80159698(void *a0) { + D_80195BC0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801959E0)); + func_80028620(1, &(*(u8 *)&D_801959E0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801959E0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80195C64[])(void); + +void func_80159968(void *a0) { + D_80195C64[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80195DB8[])(void); + +void func_80159B70(void *a0) { + D_80195DB8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80195BD4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80195BD4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80195DC0[])(void); + +void func_8015A264(void *a0) { + D_80195DC0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80195BE4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80195BE4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8015A3C8.c b/src/ov_SC06_018/ov_SC06_018_jr_8015A3C8.c new file mode 100644 index 000000000..e9041fd91 --- /dev/null +++ b/src/ov_SC06_018/ov_SC06_018_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80195B0C; +extern u8 D_80195A7C; +extern u8 D_80195A58; +extern u8 D_80195A34; +extern u8 D_80195AE8; +extern u8 D_80195AC4; +extern u8 D_80195AA0; +extern u8 D_80195A10; +extern void func_80145934(void); +extern u8 D_80195B9C; +extern u8 D_80195B78; +extern u8 D_80195B54; +extern u8 D_80195B30; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194F94[]; +extern unsigned char D_80194FC4[]; +extern unsigned char D_80195014[]; +extern unsigned char D_80195044[]; +extern unsigned char D_80195074[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801950C4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8019518C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80195214[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019521C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801D3D70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801D3D74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8019524C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801952F4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195318[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195308; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019532C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195338[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195348[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80195360[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80195350; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80195374[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80195390[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80195380; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801953A4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801953B8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801953CC; +extern void (*D_801953F4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801953D4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80195440[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80195444[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801958A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801958B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801D3DA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801958E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801958C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801958D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80195920[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80195928[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801958F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80195934[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80195904; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801D3DB0; +extern s32 D_801D3DBC; +extern s32 D_801D3DC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80195970[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80195944[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801D3DB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80195BC0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801959E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80195C64[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80195DB8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80195BD4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80195DC0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80195BE4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80195C70[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80195BF4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80195C70[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80195BF4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80195C70[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80195C04 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80195C04; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80195C04); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80195DC8[])(void); + +void func_8015AD3C(void *a0) { + D_80195DC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_020/ov_SC06_020_after.c b/src/ov_SC06_020/ov_SC06_020_after.c index 9a3172a58..3a718ef3e 100644 --- a/src/ov_SC06_020/ov_SC06_020_after.c +++ b/src/ov_SC06_020/ov_SC06_020_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_020/nonmatchings/ov_SC06_020_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186E88[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186E88[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186EC8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186EC8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186ECC[])(void); - -void func_80155580(void *a0) { - D_80186ECC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801870C0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801870C0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187330 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80187330[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80187330[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80187340[])(void); - -void func_80157544(void *a0) { - D_80187340[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B95C0; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B95C0 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B95C0 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80187368[])(void); -extern int D_801B95C0; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80187368[*(unsigned short *)((char *)param_1 + 2)](); - D_801B95C0 = D_801B95C0 - 1; - if (D_801B95C0 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80187348; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187348); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80187358; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187358); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801873A8[])(void); - -void func_80157DC4(void *a0) { - D_801873A8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801873B0[])(void); - -void func_80157FC4(void *a0) { - D_801873B0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018737C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018737C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801873BC[])(void); - -void func_8015824C(void *a0) { - D_801873BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018738C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018738C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B95C8; -extern s32 D_801B95D4; -extern s32 D_801B95D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B95C8 = 0; - D_801B95D4 = 1; - D_801B95D8 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B95C8; -extern s32 D_801B95D4; -extern s32 D_801B95D8; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B95C8 = 0; - D_801B95D4 = 1; - D_801B95D8 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801873F8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801873F8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B95C8; - -void func_80158BB0(void *arg0) { - if (D_801B95C8 == 0) { - D_801B95C8 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B95D4; -extern s32 D_801873CC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B95D4; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801873CC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B95D8; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B95D8 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B95C8; -extern s32 D_801B95D0; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B95C8 == 4) { - D_801B95C8 = 5; - } - if (D_801B95D0 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80187434[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80187434; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_801594E8); - - -extern void (*D_80187648[])(void); - -void func_80159698(void *a0) { - D_80187648[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80187468)); - func_80028620(1, &(*(u8 *)&D_80187468) + 0x10); - func_80028620(2, &(*(u8 *)&D_80187468) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801876EC[])(void); - -void func_80159968(void *a0) { - D_801876EC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187840[])(void); - -void func_80159B70(void *a0) { - D_80187840[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018765C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018765C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187848[])(void); - -void func_8015A264(void *a0) { - D_80187848[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018766C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018766C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801876F8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018767C; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801876F8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018767C); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801876F8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018768C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018768C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018768C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187850[])(void); - -void func_8015AD3C(void *a0) { - D_80187850[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8015444C.c b/src/ov_SC06_020/ov_SC06_020_jr_8015444C.c new file mode 100644 index 000000000..799c4665b --- /dev/null +++ b/src/ov_SC06_020/ov_SC06_020_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187594; +extern u8 D_80187504; +extern u8 D_801874E0; +extern u8 D_801874BC; +extern u8 D_80187570; +extern u8 D_8018754C; +extern u8 D_80187528; +extern u8 D_80187498; +extern void func_80145934(void); +extern u8 D_80187624; +extern u8 D_80187600; +extern u8 D_801875DC; +extern u8 D_801875B8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186A1C[]; +extern unsigned char D_80186A4C[]; +extern unsigned char D_80186A9C[]; +extern unsigned char D_80186ACC[]; +extern unsigned char D_80186AFC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186B4C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186C14[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186C9C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186CA4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B9588; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B958C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186CD4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186D7C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186DA0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186D90; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186DB4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186DC0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186DD0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186DE8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186DD8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186DFC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186E18[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186E08; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186E2C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186E40[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186E54; +extern void (*D_80186E7C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186E5C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186E88[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186E88[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186EC8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186EC8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186ECC[])(void); + +void func_80155580(void *a0) { + D_80186ECC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801870C0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801870C0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80187330 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80187330[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80187330[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80187340[])(void); + +void func_80157544(void *a0) { + D_80187340[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B95C0; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B95C0 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B95C0 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80187368[])(void); +extern int D_801B95C0; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80187368[*(unsigned short *)((char *)param_1 + 2)](); + D_801B95C0 = D_801B95C0 - 1; + if (D_801B95C0 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187348; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80187348); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80187358; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80187358); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801873A8[])(void); + +void func_80157DC4(void *a0) { + D_801873A8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801873B0[])(void); + +void func_80157FC4(void *a0) { + D_801873B0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018737C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018737C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801873BC[])(void); + +void func_8015824C(void *a0) { + D_801873BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018738C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018738C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B95C8; +extern s32 D_801B95D4; +extern s32 D_801B95D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B95C8 = 0; + D_801B95D4 = 1; + D_801B95D8 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B95C8; +extern s32 D_801B95D4; +extern s32 D_801B95D8; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B95C8 = 0; + D_801B95D4 = 1; + D_801B95D8 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801873F8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801873F8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B95C8; + +void func_80158BB0(void *arg0) { + if (D_801B95C8 == 0) { + D_801B95C8 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B95D4; +extern s32 D_801873CC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B95D4; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801873CC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B95D8; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B95D8 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B95C8; +extern s32 D_801B95D0; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B95C8 == 4) { + D_801B95C8 = 5; + } + if (D_801B95D0 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80187434[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80187434; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_801594E8); + + +extern void (*D_80187648[])(void); + +void func_80159698(void *a0) { + D_80187648[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80187468)); + func_80028620(1, &(*(u8 *)&D_80187468) + 0x10); + func_80028620(2, &(*(u8 *)&D_80187468) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801876EC[])(void); + +void func_80159968(void *a0) { + D_801876EC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187840[])(void); + +void func_80159B70(void *a0) { + D_80187840[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018765C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018765C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_020/nonmatchings/ov_SC06_020_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187848[])(void); + +void func_8015A264(void *a0) { + D_80187848[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018766C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018766C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_020/ov_SC06_020_jr_8015A3C8.c b/src/ov_SC06_020/ov_SC06_020_jr_8015A3C8.c new file mode 100644 index 000000000..4881bce08 --- /dev/null +++ b/src/ov_SC06_020/ov_SC06_020_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80187594; +extern u8 D_80187504; +extern u8 D_801874E0; +extern u8 D_801874BC; +extern u8 D_80187570; +extern u8 D_8018754C; +extern u8 D_80187528; +extern u8 D_80187498; +extern void func_80145934(void); +extern u8 D_80187624; +extern u8 D_80187600; +extern u8 D_801875DC; +extern u8 D_801875B8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186A1C[]; +extern unsigned char D_80186A4C[]; +extern unsigned char D_80186A9C[]; +extern unsigned char D_80186ACC[]; +extern unsigned char D_80186AFC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186B4C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80186C14[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80186C9C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80186CA4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B9588; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B958C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80186CD4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80186D7C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80186DA0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80186D90; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80186DB4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80186DC0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186DD0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186DE8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186DD8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186DFC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186E18[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186E08; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186E2C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186E40[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186E54; +extern void (*D_80186E7C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186E5C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186EC8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186ECC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80187330[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80187340[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B95C0; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80187368[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80187348; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80187358; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801873A8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801873B0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018737C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801873BC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018738C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B95C8; +extern s32 D_801B95D4; +extern s32 D_801B95D8; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801873F8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801873CC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B95D0; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187648[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80187468[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801876EC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187840[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018765C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187848[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018766C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801876F8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018767C; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801876F8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018767C); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801876F8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018768C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018768C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018768C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187850[])(void); + +void func_8015AD3C(void *a0) { + D_80187850[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_022/ov_SC06_022_after.c b/src/ov_SC06_022/ov_SC06_022_after.c index a6f8a9ee8..86a042b8d 100644 --- a/src/ov_SC06_022/ov_SC06_022_after.c +++ b/src/ov_SC06_022/ov_SC06_022_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_022/nonmatchings/ov_SC06_022_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018F144[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018F144[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018F184[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018F184[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018F188[])(void); - -void func_80155580(void *a0) { - D_8018F188[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018F37C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018F37C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F5EC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F5EC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018F5EC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018F5FC[])(void); - -void func_80157544(void *a0) { - D_8018F5FC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801E0E28; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801E0E28 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801E0E28 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018F624[])(void); -extern int D_801E0E28; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018F624[*(unsigned short *)((char *)param_1 + 2)](); - D_801E0E28 = D_801E0E28 - 1; - if (D_801E0E28 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F604; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F604); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018F614; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F614); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018F664[])(void); - -void func_80157DC4(void *a0) { - D_8018F664[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018F66C[])(void); - -void func_80157FC4(void *a0) { - D_8018F66C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018F638; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018F638); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018F678[])(void); - -void func_8015824C(void *a0) { - D_8018F678[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018F648; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F648); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801E0E30; -extern s32 D_801E0E3C; -extern s32 D_801E0E40; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801E0E30 = 0; - D_801E0E3C = 1; - D_801E0E40 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801E0E30; -extern s32 D_801E0E3C; -extern s32 D_801E0E40; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801E0E30 = 0; - D_801E0E3C = 1; - D_801E0E40 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018F6B4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018F6B4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801E0E30; - -void func_80158BB0(void *arg0) { - if (D_801E0E30 == 0) { - D_801E0E30 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801E0E3C; -extern s32 D_8018F688[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801E0E3C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F688[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801E0E40; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801E0E40 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801E0E30; -extern s32 D_801E0E38; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801E0E30 == 4) { - D_801E0E30 = 5; - } - if (D_801E0E38 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018F6F0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018F6F0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_801594E8); - - -extern void (*D_8018F904[])(void); - -void func_80159698(void *a0) { - D_8018F904[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018F724)); - func_80028620(1, &(*(u8 *)&D_8018F724) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018F724) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018F9A8[])(void); - -void func_80159968(void *a0) { - D_8018F9A8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018FAFC[])(void); - -void func_80159B70(void *a0) { - D_8018FAFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018F918; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F918); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018FB04[])(void); - -void func_8015A264(void *a0) { - D_8018FB04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018F928; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F928); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018F9B4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_8018F938; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018F938); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018F9B4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F948 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018F948; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018F948); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018FB0C[])(void); - -void func_8015AD3C(void *a0) { - D_8018FB0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8015444C.c b/src/ov_SC06_022/ov_SC06_022_jr_8015444C.c new file mode 100644 index 000000000..f3371b405 --- /dev/null +++ b/src/ov_SC06_022/ov_SC06_022_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F850; +extern u8 D_8018F7C0; +extern u8 D_8018F79C; +extern u8 D_8018F778; +extern u8 D_8018F82C; +extern u8 D_8018F808; +extern u8 D_8018F7E4; +extern u8 D_8018F754; +extern void func_80145934(void); +extern u8 D_8018F8E0; +extern u8 D_8018F8BC; +extern u8 D_8018F898; +extern u8 D_8018F874; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018ECD8[]; +extern unsigned char D_8018ED08[]; +extern unsigned char D_8018ED58[]; +extern unsigned char D_8018ED88[]; +extern unsigned char D_8018EDB8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EE08[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EED0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EF58[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EF60; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0DF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0DF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EF90; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F038[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F05C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F04C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F070[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F07C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F08C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F0A4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F094; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F0B8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F0D4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F0C4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F0E8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F0FC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F110; +extern void (*D_8018F138[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F118; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018F144[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018F144[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018F184[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018F184[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018F188[])(void); + +void func_80155580(void *a0) { + D_8018F188[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018F37C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018F37C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018F5EC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F5EC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018F5EC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018F5FC[])(void); + +void func_80157544(void *a0) { + D_8018F5FC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801E0E28; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801E0E28 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801E0E28 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018F624[])(void); +extern int D_801E0E28; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018F624[*(unsigned short *)((char *)param_1 + 2)](); + D_801E0E28 = D_801E0E28 - 1; + if (D_801E0E28 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F604; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018F604); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018F614; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018F614); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018F664[])(void); + +void func_80157DC4(void *a0) { + D_8018F664[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018F66C[])(void); + +void func_80157FC4(void *a0) { + D_8018F66C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018F638; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018F638); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018F678[])(void); + +void func_8015824C(void *a0) { + D_8018F678[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018F648; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018F648); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801E0E30; +extern s32 D_801E0E3C; +extern s32 D_801E0E40; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801E0E30 = 0; + D_801E0E3C = 1; + D_801E0E40 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801E0E30; +extern s32 D_801E0E3C; +extern s32 D_801E0E40; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801E0E30 = 0; + D_801E0E3C = 1; + D_801E0E40 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018F6B4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018F6B4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801E0E30; + +void func_80158BB0(void *arg0) { + if (D_801E0E30 == 0) { + D_801E0E30 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801E0E3C; +extern s32 D_8018F688[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801E0E3C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018F688[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801E0E40; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801E0E40 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0E30; +extern s32 D_801E0E38; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801E0E30 == 4) { + D_801E0E30 = 5; + } + if (D_801E0E38 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018F6F0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018F6F0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_801594E8); + + +extern void (*D_8018F904[])(void); + +void func_80159698(void *a0) { + D_8018F904[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018F724)); + func_80028620(1, &(*(u8 *)&D_8018F724) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018F724) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018F9A8[])(void); + +void func_80159968(void *a0) { + D_8018F9A8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018FAFC[])(void); + +void func_80159B70(void *a0) { + D_8018FAFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018F918; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018F918); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018FB04[])(void); + +void func_8015A264(void *a0) { + D_8018FB04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018F928; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018F928); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_022/ov_SC06_022_jr_8015A3C8.c b/src/ov_SC06_022/ov_SC06_022_jr_8015A3C8.c new file mode 100644 index 000000000..461f2a2be --- /dev/null +++ b/src/ov_SC06_022/ov_SC06_022_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018F850; +extern u8 D_8018F7C0; +extern u8 D_8018F79C; +extern u8 D_8018F778; +extern u8 D_8018F82C; +extern u8 D_8018F808; +extern u8 D_8018F7E4; +extern u8 D_8018F754; +extern void func_80145934(void); +extern u8 D_8018F8E0; +extern u8 D_8018F8BC; +extern u8 D_8018F898; +extern u8 D_8018F874; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018ECD8[]; +extern unsigned char D_8018ED08[]; +extern unsigned char D_8018ED58[]; +extern unsigned char D_8018ED88[]; +extern unsigned char D_8018EDB8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018EE08[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018EED0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018EF58[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018EF60; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801E0DF0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801E0DF4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018EF90; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018F038[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018F05C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018F04C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018F070[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018F07C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018F08C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018F0A4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018F094; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018F0B8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018F0D4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018F0C4; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018F0E8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018F0FC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018F110; +extern void (*D_8018F138[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018F118; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018F184[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018F188[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018F5EC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018F5FC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801E0E28; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018F624[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018F604; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018F614; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018F664[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018F66C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018F638; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018F678[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018F648; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801E0E30; +extern s32 D_801E0E3C; +extern s32 D_801E0E40; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018F6B4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018F688[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801E0E38; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018F904[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018F724[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018F9A8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018FAFC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018F918; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018FB04[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018F928; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018F9B4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_8018F938; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_8018F938); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018F9B4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018F948 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018F948; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018F948); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018FB0C[])(void); + +void func_8015AD3C(void *a0) { + D_8018FB0C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_024/ov_SC06_024_after.c b/src/ov_SC06_024/ov_SC06_024_after.c index 5edacddee..efc4e1cd5 100644 --- a/src/ov_SC06_024/ov_SC06_024_after.c +++ b/src/ov_SC06_024/ov_SC06_024_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_024/nonmatchings/ov_SC06_024_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8019161C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8019161C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8019165C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8019165C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80191660[])(void); - -void func_80155580(void *a0) { - D_80191660[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80191854[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80191854[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80191AC4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80191AC4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80191AC4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80191AD4[])(void); - -void func_80157544(void *a0) { - D_80191AD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801DFFA8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801DFFA8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801DFFA8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80191AFC[])(void); -extern int D_801DFFA8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80191AFC[*(unsigned short *)((char *)param_1 + 2)](); - D_801DFFA8 = D_801DFFA8 - 1; - if (D_801DFFA8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80191ADC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80191ADC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80191AEC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80191AEC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80191B3C[])(void); - -void func_80157DC4(void *a0) { - D_80191B3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80191B44[])(void); - -void func_80157FC4(void *a0) { - D_80191B44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80191B10; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80191B10); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80191B50[])(void); - -void func_8015824C(void *a0) { - D_80191B50[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80191B20; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80191B20); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801DFFB0; -extern s32 D_801DFFBC; -extern s32 D_801DFFC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801DFFB0 = 0; - D_801DFFBC = 1; - D_801DFFC0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801DFFB0; -extern s32 D_801DFFBC; -extern s32 D_801DFFC0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801DFFB0 = 0; - D_801DFFBC = 1; - D_801DFFC0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80191B8C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80191B8C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801DFFB0; - -void func_80158BB0(void *arg0) { - if (D_801DFFB0 == 0) { - D_801DFFB0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801DFFBC; -extern s32 D_80191B60[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801DFFBC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80191B60[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801DFFC0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801DFFC0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801DFFB0; -extern s32 D_801DFFB8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801DFFB0 == 4) { - D_801DFFB0 = 5; - } - if (D_801DFFB8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80191BC8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80191BC8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_801594E8); - - -extern void (*D_80191DDC[])(void); - -void func_80159698(void *a0) { - D_80191DDC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80191BFC)); - func_80028620(1, &(*(u8 *)&D_80191BFC) + 0x10); - func_80028620(2, &(*(u8 *)&D_80191BFC) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80191E80[])(void); - -void func_80159968(void *a0) { - D_80191E80[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80191FD4[])(void); - -void func_80159B70(void *a0) { - D_80191FD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80191DF0; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80191DF0); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80191FDC[])(void); - -void func_8015A264(void *a0) { - D_80191FDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80191E00; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80191E00); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80191E8C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80191E10; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80191E8C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80191E10); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80191E8C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80191E20 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80191E20; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80191E20); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80191FE4[])(void); - -void func_8015AD3C(void *a0) { - D_80191FE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8015444C.c b/src/ov_SC06_024/ov_SC06_024_jr_8015444C.c new file mode 100644 index 000000000..95c1995a8 --- /dev/null +++ b/src/ov_SC06_024/ov_SC06_024_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80191D28; +extern u8 D_80191C98; +extern u8 D_80191C74; +extern u8 D_80191C50; +extern u8 D_80191D04; +extern u8 D_80191CE0; +extern u8 D_80191CBC; +extern u8 D_80191C2C; +extern void func_80145934(void); +extern u8 D_80191DB8; +extern u8 D_80191D94; +extern u8 D_80191D70; +extern u8 D_80191D4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801911B0[]; +extern unsigned char D_801911E0[]; +extern unsigned char D_80191230[]; +extern unsigned char D_80191260[]; +extern unsigned char D_80191290[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801912E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801913A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80191430[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80191438; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DFF70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DFF74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80191468; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80191510[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80191534[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80191524; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80191548[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80191554[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80191564[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019157C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019156C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80191590[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801915AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019159C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801915C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801915D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801915E8; +extern void (*D_80191610[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801915F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8019161C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8019161C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8019165C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8019165C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80191660[])(void); + +void func_80155580(void *a0) { + D_80191660[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80191854[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80191854[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80191AC4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80191AC4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80191AC4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80191AD4[])(void); + +void func_80157544(void *a0) { + D_80191AD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801DFFA8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801DFFA8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801DFFA8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80191AFC[])(void); +extern int D_801DFFA8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80191AFC[*(unsigned short *)((char *)param_1 + 2)](); + D_801DFFA8 = D_801DFFA8 - 1; + if (D_801DFFA8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80191ADC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80191ADC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80191AEC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80191AEC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80191B3C[])(void); + +void func_80157DC4(void *a0) { + D_80191B3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80191B44[])(void); + +void func_80157FC4(void *a0) { + D_80191B44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80191B10; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80191B10); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80191B50[])(void); + +void func_8015824C(void *a0) { + D_80191B50[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80191B20; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80191B20); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801DFFB0; +extern s32 D_801DFFBC; +extern s32 D_801DFFC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801DFFB0 = 0; + D_801DFFBC = 1; + D_801DFFC0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801DFFB0; +extern s32 D_801DFFBC; +extern s32 D_801DFFC0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801DFFB0 = 0; + D_801DFFBC = 1; + D_801DFFC0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80191B8C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80191B8C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801DFFB0; + +void func_80158BB0(void *arg0) { + if (D_801DFFB0 == 0) { + D_801DFFB0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801DFFBC; +extern s32 D_80191B60[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801DFFBC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80191B60[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801DFFC0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801DFFC0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801DFFB0; +extern s32 D_801DFFB8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801DFFB0 == 4) { + D_801DFFB0 = 5; + } + if (D_801DFFB8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80191BC8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80191BC8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_801594E8); + + +extern void (*D_80191DDC[])(void); + +void func_80159698(void *a0) { + D_80191DDC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80191BFC)); + func_80028620(1, &(*(u8 *)&D_80191BFC) + 0x10); + func_80028620(2, &(*(u8 *)&D_80191BFC) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80191E80[])(void); + +void func_80159968(void *a0) { + D_80191E80[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80191FD4[])(void); + +void func_80159B70(void *a0) { + D_80191FD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80191DF0; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80191DF0); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80191FDC[])(void); + +void func_8015A264(void *a0) { + D_80191FDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80191E00; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80191E00); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_024/ov_SC06_024_jr_8015A3C8.c b/src/ov_SC06_024/ov_SC06_024_jr_8015A3C8.c new file mode 100644 index 000000000..77d17b1bf --- /dev/null +++ b/src/ov_SC06_024/ov_SC06_024_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80191D28; +extern u8 D_80191C98; +extern u8 D_80191C74; +extern u8 D_80191C50; +extern u8 D_80191D04; +extern u8 D_80191CE0; +extern u8 D_80191CBC; +extern u8 D_80191C2C; +extern void func_80145934(void); +extern u8 D_80191DB8; +extern u8 D_80191D94; +extern u8 D_80191D70; +extern u8 D_80191D4C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801911B0[]; +extern unsigned char D_801911E0[]; +extern unsigned char D_80191230[]; +extern unsigned char D_80191260[]; +extern unsigned char D_80191290[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801912E0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801913A8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80191430[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80191438; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DFF70; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DFF74; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80191468; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80191510[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80191534[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80191524; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80191548[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80191554[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80191564[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8019157C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8019156C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80191590[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801915AC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8019159C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801915C0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801915D4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801915E8; +extern void (*D_80191610[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801915F0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8019165C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80191660[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80191AC4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80191AD4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801DFFA8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80191AFC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80191ADC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80191AEC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80191B3C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80191B44[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80191B10; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80191B50[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80191B20; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801DFFB0; +extern s32 D_801DFFBC; +extern s32 D_801DFFC0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80191B8C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80191B60[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801DFFB8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80191DDC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80191BFC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80191E80[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80191FD4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80191DF0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80191FDC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80191E00; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80191E8C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80191E10; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80191E8C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80191E10); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80191E8C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80191E20 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80191E20; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80191E20); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80191FE4[])(void); + +void func_8015AD3C(void *a0) { + D_80191FE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_025/ov_SC06_025_after.c b/src/ov_SC06_025/ov_SC06_025_after.c index 48abddc8d..307a6358d 100644 --- a/src/ov_SC06_025/ov_SC06_025_after.c +++ b/src/ov_SC06_025/ov_SC06_025_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_025/nonmatchings/ov_SC06_025_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80186AC0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80186AC0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80186B00[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80186B00[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80186B04[])(void); - -void func_80155580(void *a0) { - D_80186B04[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80186CF8[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80186CF8[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186F68 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80186F68[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80186F68[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80186F78[])(void); - -void func_80157544(void *a0) { - D_80186F78[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B0170; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B0170 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B0170 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80186FA0[])(void); -extern int D_801B0170; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80186FA0[*(unsigned short *)((char *)param_1 + 2)](); - D_801B0170 = D_801B0170 - 1; - if (D_801B0170 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80186F80; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186F80); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80186F90; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186F90); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80186FE0[])(void); - -void func_80157DC4(void *a0) { - D_80186FE0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80186FE8[])(void); - -void func_80157FC4(void *a0) { - D_80186FE8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80186FB4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80186FB4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80186FF4[])(void); - -void func_8015824C(void *a0) { - D_80186FF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80186FC4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186FC4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B0178; -extern s32 D_801B0184; -extern s32 D_801B0188; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B0178 = 0; - D_801B0184 = 1; - D_801B0188 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B0178; -extern s32 D_801B0184; -extern s32 D_801B0188; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B0178 = 0; - D_801B0184 = 1; - D_801B0188 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80187030[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80187030[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B0178; - -void func_80158BB0(void *arg0) { - if (D_801B0178 == 0) { - D_801B0178 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B0184; -extern s32 D_80187004[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B0184; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187004[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B0188; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B0188 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B0178; -extern s32 D_801B0180; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B0178 == 4) { - D_801B0178 = 5; - } - if (D_801B0180 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018706C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018706C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_801594E8); - - -extern void (*D_80187280[])(void); - -void func_80159698(void *a0) { - D_80187280[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801870A0)); - func_80028620(1, &(*(u8 *)&D_801870A0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801870A0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80187324[])(void); - -void func_80159968(void *a0) { - D_80187324[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80187478[])(void); - -void func_80159B70(void *a0) { - D_80187478[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80187294; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187294); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80187480[])(void); - -void func_8015A264(void *a0) { - D_80187480[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801872A4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801872A4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80187330[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_801872B4[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80187330[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801872B4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80187330[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801872C4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801872C4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801872C4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80187488[])(void); - -void func_8015AD3C(void *a0) { - D_80187488[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8015444C.c b/src/ov_SC06_025/ov_SC06_025_jr_8015444C.c new file mode 100644 index 000000000..d98812348 --- /dev/null +++ b/src/ov_SC06_025/ov_SC06_025_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871CC; +extern u8 D_8018713C; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_801870D0; +extern void func_80145934(void); +extern u8 D_8018725C; +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186654[]; +extern unsigned char D_80186684[]; +extern unsigned char D_801866D4[]; +extern unsigned char D_80186704[]; +extern unsigned char D_80186734[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186784[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018684C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868D4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868DC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B013C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018690C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801869B4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869D8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869C8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869EC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869F8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A8C; +extern void (*D_80186AB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80186AC0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80186AC0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80186B00[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80186B00[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80186B04[])(void); + +void func_80155580(void *a0) { + D_80186B04[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80186CF8[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80186CF8[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80186F68 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F68[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80186F68[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80186F78[])(void); + +void func_80157544(void *a0) { + D_80186F78[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B0170; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B0170 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B0170 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80186FA0[])(void); +extern int D_801B0170; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80186FA0[*(unsigned short *)((char *)param_1 + 2)](); + D_801B0170 = D_801B0170 - 1; + if (D_801B0170 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F80; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80186F80); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80186F90; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80186F90); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80186FE0[])(void); + +void func_80157DC4(void *a0) { + D_80186FE0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80186FE8[])(void); + +void func_80157FC4(void *a0) { + D_80186FE8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80186FB4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80186FB4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80186FF4[])(void); + +void func_8015824C(void *a0) { + D_80186FF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80186FC4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80186FC4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B0178; +extern s32 D_801B0184; +extern s32 D_801B0188; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B0178 = 0; + D_801B0184 = 1; + D_801B0188 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B0178; +extern s32 D_801B0184; +extern s32 D_801B0188; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B0178 = 0; + D_801B0184 = 1; + D_801B0188 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80187030[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80187030[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B0178; + +void func_80158BB0(void *arg0) { + if (D_801B0178 == 0) { + D_801B0178 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B0184; +extern s32 D_80187004[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B0184; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80187004[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B0188; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B0188 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0178; +extern s32 D_801B0180; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B0178 == 4) { + D_801B0178 = 5; + } + if (D_801B0180 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018706C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018706C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_801594E8); + + +extern void (*D_80187280[])(void); + +void func_80159698(void *a0) { + D_80187280[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801870A0)); + func_80028620(1, &(*(u8 *)&D_801870A0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801870A0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80187324[])(void); + +void func_80159968(void *a0) { + D_80187324[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80187478[])(void); + +void func_80159B70(void *a0) { + D_80187478[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80187294; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80187294); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80187480[])(void); + +void func_8015A264(void *a0) { + D_80187480[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801872A4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801872A4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8015A3C8.c b/src/ov_SC06_025/ov_SC06_025_jr_8015A3C8.c new file mode 100644 index 000000000..ff3db2062 --- /dev/null +++ b/src/ov_SC06_025/ov_SC06_025_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801871CC; +extern u8 D_8018713C; +extern u8 D_80187118; +extern u8 D_801870F4; +extern u8 D_801871A8; +extern u8 D_80187184; +extern u8 D_80187160; +extern u8 D_801870D0; +extern void func_80145934(void); +extern u8 D_8018725C; +extern u8 D_80187238; +extern u8 D_80187214; +extern u8 D_801871F0; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80186654[]; +extern unsigned char D_80186684[]; +extern unsigned char D_801866D4[]; +extern unsigned char D_80186704[]; +extern unsigned char D_80186734[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80186784[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018684C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801868D4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801868DC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B0138; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B013C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018690C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_801869B4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801869D8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801869C8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801869EC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801869F8[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80186A08[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80186A20[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80186A10; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80186A34[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80186A50[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80186A40; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80186A64[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80186A78[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80186A8C; +extern void (*D_80186AB4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80186A94; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80186B00[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80186B04[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80186F68[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80186F78[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B0170; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80186FA0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80186F80; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80186F90; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80186FE0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80186FE8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80186FB4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80186FF4[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80186FC4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B0178; +extern s32 D_801B0184; +extern s32 D_801B0188; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80187030[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80187004[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B0180; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80187280[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801870A0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80187324[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80187478[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80187294; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80187480[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801872A4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80187330[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_801872B4[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80187330[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801872B4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80187330[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801872C4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801872C4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801872C4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80187488[])(void); + +void func_8015AD3C(void *a0) { + D_80187488[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_027/ov_SC06_027_after.c b/src/ov_SC06_027/ov_SC06_027_after.c index e14f74468..3087ceff7 100644 --- a/src/ov_SC06_027/ov_SC06_027_after.c +++ b/src/ov_SC06_027/ov_SC06_027_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_027/nonmatchings/ov_SC06_027_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FE00[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FE00[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017FE40[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017FE40[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017FE44[])(void); - -void func_80155580(void *a0) { - D_8017FE44[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80180038[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80180038[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801802A8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801802A8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801802A8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_801802B8[])(void); - -void func_80157544(void *a0) { - D_801802B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019C148; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019C148 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019C148 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801802E0[])(void); -extern int D_8019C148; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801802E0[*(unsigned short *)((char *)param_1 + 2)](); - D_8019C148 = D_8019C148 - 1; - if (D_8019C148 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_801802C0; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801802C0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801802D0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801802D0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80180320[])(void); - -void func_80157DC4(void *a0) { - D_80180320[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80180328[])(void); - -void func_80157FC4(void *a0) { - D_80180328[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801802F4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801802F4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180334[])(void); - -void func_8015824C(void *a0) { - D_80180334[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80180304; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180304); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019C150; -extern s32 D_8019C15C; -extern s32 D_8019C160; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019C150 = 0; - D_8019C15C = 1; - D_8019C160 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019C150; -extern s32 D_8019C15C; -extern s32 D_8019C160; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019C150 = 0; - D_8019C15C = 1; - D_8019C160 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180370[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180370[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019C150; - -void func_80158BB0(void *arg0) { - if (D_8019C150 == 0) { - D_8019C150 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019C15C; -extern s32 D_80180344[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019C15C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180344[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019C160; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019C160 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019C150; -extern s32 D_8019C158; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019C150 == 4) { - D_8019C150 = 5; - } - if (D_8019C158 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801803AC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801803AC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_801594E8); - - -extern void (*D_801805C0[])(void); - -void func_80159698(void *a0) { - D_801805C0[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801803E0)); - func_80028620(1, &(*(u8 *)&D_801803E0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801803E0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80180664[])(void); - -void func_80159968(void *a0) { - D_80180664[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_801807B8[])(void); - -void func_80159B70(void *a0) { - D_801807B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801805D4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801805D4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_801807C0[])(void); - -void func_8015A264(void *a0) { - D_801807C0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801805E4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801805E4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180670[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_801805F4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180670[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801805F4)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180670[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180604 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80180604; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80180604); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_801807C8[])(void); - -void func_8015AD3C(void *a0) { - D_801807C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8015444C.c b/src/ov_SC06_027/ov_SC06_027_jr_8015444C.c new file mode 100644 index 000000000..be1992ef1 --- /dev/null +++ b/src/ov_SC06_027/ov_SC06_027_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018050C; +extern u8 D_8018047C; +extern u8 D_80180458; +extern u8 D_80180434; +extern u8 D_801804E8; +extern u8 D_801804C4; +extern u8 D_801804A0; +extern u8 D_80180410; +extern void func_80145934(void); +extern u8 D_8018059C; +extern u8 D_80180578; +extern u8 D_80180554; +extern u8 D_80180530; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F994[]; +extern unsigned char D_8017F9C4[]; +extern unsigned char D_8017FA14[]; +extern unsigned char D_8017FA44[]; +extern unsigned char D_8017FA74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FAC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FB8C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FC14[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FC1C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019C110; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019C114; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FC4C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FCF4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FD18[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FD08; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FD2C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FD38[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FD48[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FD60[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FD50; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FD74[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FD90[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FD80; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FDA4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FDB8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FDCC; +extern void (*D_8017FDF4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FDD4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FE00[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FE00[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017FE40[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017FE40[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017FE44[])(void); + +void func_80155580(void *a0) { + D_8017FE44[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80180038[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80180038[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801802A8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801802A8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801802A8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_801802B8[])(void); + +void func_80157544(void *a0) { + D_801802B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019C148; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019C148 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019C148 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801802E0[])(void); +extern int D_8019C148; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801802E0[*(unsigned short *)((char *)param_1 + 2)](); + D_8019C148 = D_8019C148 - 1; + if (D_8019C148 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801802C0; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_801802C0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801802D0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801802D0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80180320[])(void); + +void func_80157DC4(void *a0) { + D_80180320[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80180328[])(void); + +void func_80157FC4(void *a0) { + D_80180328[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801802F4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801802F4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180334[])(void); + +void func_8015824C(void *a0) { + D_80180334[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80180304; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80180304); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019C150; +extern s32 D_8019C15C; +extern s32 D_8019C160; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019C150 = 0; + D_8019C15C = 1; + D_8019C160 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019C150; +extern s32 D_8019C15C; +extern s32 D_8019C160; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019C150 = 0; + D_8019C15C = 1; + D_8019C160 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180370[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180370[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019C150; + +void func_80158BB0(void *arg0) { + if (D_8019C150 == 0) { + D_8019C150 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019C15C; +extern s32 D_80180344[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019C15C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180344[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019C160; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019C160 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019C150; +extern s32 D_8019C158; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019C150 == 4) { + D_8019C150 = 5; + } + if (D_8019C158 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801803AC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801803AC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_801594E8); + + +extern void (*D_801805C0[])(void); + +void func_80159698(void *a0) { + D_801805C0[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801803E0)); + func_80028620(1, &(*(u8 *)&D_801803E0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801803E0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80180664[])(void); + +void func_80159968(void *a0) { + D_80180664[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_801807B8[])(void); + +void func_80159B70(void *a0) { + D_801807B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801805D4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801805D4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_027/nonmatchings/ov_SC06_027_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_801807C0[])(void); + +void func_8015A264(void *a0) { + D_801807C0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801805E4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801805E4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_027/ov_SC06_027_jr_8015A3C8.c b/src/ov_SC06_027/ov_SC06_027_jr_8015A3C8.c new file mode 100644 index 000000000..e20ee7276 --- /dev/null +++ b/src/ov_SC06_027/ov_SC06_027_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018050C; +extern u8 D_8018047C; +extern u8 D_80180458; +extern u8 D_80180434; +extern u8 D_801804E8; +extern u8 D_801804C4; +extern u8 D_801804A0; +extern u8 D_80180410; +extern void func_80145934(void); +extern u8 D_8018059C; +extern u8 D_80180578; +extern u8 D_80180554; +extern u8 D_80180530; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F994[]; +extern unsigned char D_8017F9C4[]; +extern unsigned char D_8017FA14[]; +extern unsigned char D_8017FA44[]; +extern unsigned char D_8017FA74[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017FAC4[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017FB8C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017FC14[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017FC1C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019C110; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019C114; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FC4C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FCF4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FD18[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FD08; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FD2C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FD38[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FD48[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FD60[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FD50; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FD74[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FD90[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FD80; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FDA4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FDB8[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FDCC; +extern void (*D_8017FDF4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FDD4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FE40[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FE44[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801802A8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_801802B8[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019C148; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801802E0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_801802C0; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801802D0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80180320[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80180328[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801802F4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180334[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80180304; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019C150; +extern s32 D_8019C15C; +extern s32 D_8019C160; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180370[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180344[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019C158; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_801805C0[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801803E0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180664[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_801807B8[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801805D4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_801807C0[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801805E4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180670[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_801805F4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180670[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_801805F4)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180670[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80180604 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80180604; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80180604); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_801807C8[])(void); + +void func_8015AD3C(void *a0) { + D_801807C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_029/ov_SC06_029_after.c b/src/ov_SC06_029/ov_SC06_029_after.c index 1694545cf..2feafe7fe 100644 --- a/src/ov_SC06_029/ov_SC06_029_after.c +++ b/src/ov_SC06_029/ov_SC06_029_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_029/nonmatchings/ov_SC06_029_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8018E394[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8018E394[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8018E3D4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8018E3D4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018E3D8[])(void); - -void func_80155580(void *a0) { - D_8018E3D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018E5CC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018E5CC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018E83C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018E83C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018E83C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018E84C[])(void); - -void func_80157544(void *a0) { - D_8018E84C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801DBA68; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801DBA68 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801DBA68 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8018E874[])(void); -extern int D_801DBA68; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8018E874[*(unsigned short *)((char *)param_1 + 2)](); - D_801DBA68 = D_801DBA68 - 1; - if (D_801DBA68 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018E854; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018E854); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8018E864; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018E864); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8018E8B4[])(void); - -void func_80157DC4(void *a0) { - D_8018E8B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8018E8BC[])(void); - -void func_80157FC4(void *a0) { - D_8018E8BC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018E888; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018E888); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018E8C8[])(void); - -void func_8015824C(void *a0) { - D_8018E8C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018E898; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018E898); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801DBA70; -extern s32 D_801DBA7C; -extern s32 D_801DBA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801DBA70 = 0; - D_801DBA7C = 1; - D_801DBA80 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801DBA70; -extern s32 D_801DBA7C; -extern s32 D_801DBA80; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801DBA70 = 0; - D_801DBA7C = 1; - D_801DBA80 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8018E904[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8018E904[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801DBA70; - -void func_80158BB0(void *arg0) { - if (D_801DBA70 == 0) { - D_801DBA70 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801DBA7C; -extern s32 D_8018E8D8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801DBA7C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018E8D8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801DBA80; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801DBA80 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801DBA70; -extern s32 D_801DBA78; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801DBA70 == 4) { - D_801DBA70 = 5; - } - if (D_801DBA78 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018E940[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018E940; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_801594E8); - - -extern void (*D_8018EB54[])(void); - -void func_80159698(void *a0) { - D_8018EB54[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8018E974)); - func_80028620(1, &(*(u8 *)&D_8018E974) + 0x10); - func_80028620(2, &(*(u8 *)&D_8018E974) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8018EBF8[])(void); - -void func_80159968(void *a0) { - D_8018EBF8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018ED4C[])(void); - -void func_80159B70(void *a0) { - D_8018ED4C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8018EB68; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EB68); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8018ED54[])(void); - -void func_8015A264(void *a0) { - D_8018ED54[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8018EB78; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EB78); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8018EC04[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_8018EB88[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8018EC04[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EB88)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8018EC04[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EB98 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018EB98; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8018EB98); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018ED5C[])(void); - -void func_8015AD3C(void *a0) { - D_8018ED5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8015444C.c b/src/ov_SC06_029/ov_SC06_029_jr_8015444C.c new file mode 100644 index 000000000..bcd534861 --- /dev/null +++ b/src/ov_SC06_029/ov_SC06_029_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EAA0; +extern u8 D_8018EA10; +extern u8 D_8018E9EC; +extern u8 D_8018E9C8; +extern u8 D_8018EA7C; +extern u8 D_8018EA58; +extern u8 D_8018EA34; +extern u8 D_8018E9A4; +extern void func_80145934(void); +extern u8 D_8018EB30; +extern u8 D_8018EB0C; +extern u8 D_8018EAE8; +extern u8 D_8018EAC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DF28[]; +extern unsigned char D_8018DF58[]; +extern unsigned char D_8018DFA8[]; +extern unsigned char D_8018DFD8[]; +extern unsigned char D_8018E008[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E058[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E120[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E1A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E1B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DBA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DBA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E1E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E288[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E2AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E29C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E2C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E2CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E2DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E2F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E2E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E308[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E324[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E314; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E34C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E360; +extern void (*D_8018E388[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E368; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8018E394[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8018E394[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8018E3D4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8018E3D4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018E3D8[])(void); + +void func_80155580(void *a0) { + D_8018E3D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018E5CC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018E5CC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018E83C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E83C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018E83C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018E84C[])(void); + +void func_80157544(void *a0) { + D_8018E84C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801DBA68; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801DBA68 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801DBA68 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8018E874[])(void); +extern int D_801DBA68; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8018E874[*(unsigned short *)((char *)param_1 + 2)](); + D_801DBA68 = D_801DBA68 - 1; + if (D_801DBA68 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E854; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8018E854); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8018E864; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8018E864); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8018E8B4[])(void); + +void func_80157DC4(void *a0) { + D_8018E8B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8018E8BC[])(void); + +void func_80157FC4(void *a0) { + D_8018E8BC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018E888; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018E888); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018E8C8[])(void); + +void func_8015824C(void *a0) { + D_8018E8C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018E898; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018E898); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801DBA70; +extern s32 D_801DBA7C; +extern s32 D_801DBA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801DBA70 = 0; + D_801DBA7C = 1; + D_801DBA80 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801DBA70; +extern s32 D_801DBA7C; +extern s32 D_801DBA80; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801DBA70 = 0; + D_801DBA7C = 1; + D_801DBA80 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8018E904[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8018E904[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801DBA70; + +void func_80158BB0(void *arg0) { + if (D_801DBA70 == 0) { + D_801DBA70 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801DBA7C; +extern s32 D_8018E8D8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801DBA7C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018E8D8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801DBA80; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801DBA80 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801DBA70; +extern s32 D_801DBA78; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801DBA70 == 4) { + D_801DBA70 = 5; + } + if (D_801DBA78 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018E940[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018E940; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_801594E8); + + +extern void (*D_8018EB54[])(void); + +void func_80159698(void *a0) { + D_8018EB54[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8018E974)); + func_80028620(1, &(*(u8 *)&D_8018E974) + 0x10); + func_80028620(2, &(*(u8 *)&D_8018E974) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8018EBF8[])(void); + +void func_80159968(void *a0) { + D_8018EBF8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018ED4C[])(void); + +void func_80159B70(void *a0) { + D_8018ED4C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8018EB68; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8018EB68); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8018ED54[])(void); + +void func_8015A264(void *a0) { + D_8018ED54[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8018EB78; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8018EB78); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8015A3C8.c b/src/ov_SC06_029/ov_SC06_029_jr_8015A3C8.c new file mode 100644 index 000000000..b3b56996e --- /dev/null +++ b/src/ov_SC06_029/ov_SC06_029_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018EAA0; +extern u8 D_8018EA10; +extern u8 D_8018E9EC; +extern u8 D_8018E9C8; +extern u8 D_8018EA7C; +extern u8 D_8018EA58; +extern u8 D_8018EA34; +extern u8 D_8018E9A4; +extern void func_80145934(void); +extern u8 D_8018EB30; +extern u8 D_8018EB0C; +extern u8 D_8018EAE8; +extern u8 D_8018EAC4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018DF28[]; +extern unsigned char D_8018DF58[]; +extern unsigned char D_8018DFA8[]; +extern unsigned char D_8018DFD8[]; +extern unsigned char D_8018E008[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018E058[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018E120[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018E1A8[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018E1B0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801DBA30; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801DBA34; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018E1E0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018E288[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018E2AC[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018E29C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018E2C0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018E2CC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018E2DC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018E2F4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018E2E4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018E308[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018E324[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018E314; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018E338[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018E34C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018E360; +extern void (*D_8018E388[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018E368; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018E3D4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018E3D8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018E83C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018E84C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801DBA68; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018E874[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018E854; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018E864; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018E8B4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018E8BC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018E888; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018E8C8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018E898; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801DBA70; +extern s32 D_801DBA7C; +extern s32 D_801DBA80; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018E904[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018E8D8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801DBA78; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018EB54[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018E974[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018EBF8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018ED4C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018EB68; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018ED54[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018EB78; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8018EC04[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_8018EB88[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8018EC04[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8018EB88)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8018EC04[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8018EB98 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018EB98; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8018EB98); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018ED5C[])(void); + +void func_8015AD3C(void *a0) { + D_8018ED5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_030/ov_SC06_030_after.c b/src/ov_SC06_030/ov_SC06_030_after.c index 0c608001c..e27a8c340 100644 --- a/src/ov_SC06_030/ov_SC06_030_after.c +++ b/src/ov_SC06_030/ov_SC06_030_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_030/nonmatchings/ov_SC06_030_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183C84[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183C84[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183CC4[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183CC4[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80183CC8[])(void); - -void func_80155580(void *a0) { - D_80183CC8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80183EBC[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80183EBC[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018412C indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8018412C[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8018412C[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8018413C[])(void); - -void func_80157544(void *a0) { - D_8018413C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801B8CC8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801B8CC8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801B8CC8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184164[])(void); -extern int D_801B8CC8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184164[*(unsigned short *)((char *)param_1 + 2)](); - D_801B8CC8 = D_801B8CC8 - 1; - if (D_801B8CC8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184144; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184144); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184154; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184154); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801841A4[])(void); - -void func_80157DC4(void *a0) { - D_801841A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801841AC[])(void); - -void func_80157FC4(void *a0) { - D_801841AC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80184178; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80184178); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801841B8[])(void); - -void func_8015824C(void *a0) { - D_801841B8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80184188; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184188); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801B8CD0; -extern s32 D_801B8CDC; -extern s32 D_801B8CE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801B8CD0 = 0; - D_801B8CDC = 1; - D_801B8CE0 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801B8CD0; -extern s32 D_801B8CDC; -extern s32 D_801B8CE0; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801B8CD0 = 0; - D_801B8CDC = 1; - D_801B8CE0 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801841F4[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801841F4[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801B8CD0; - -void func_80158BB0(void *arg0) { - if (D_801B8CD0 == 0) { - D_801B8CD0 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801B8CDC; -extern s32 D_801841C8[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801B8CDC; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801841C8[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801B8CE0; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801B8CE0 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801B8CD0; -extern s32 D_801B8CD8; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801B8CD0 == 4) { - D_801B8CD0 = 5; - } - if (D_801B8CD8 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184230[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184230; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_801594E8); - - -extern void (*D_80184444[])(void); - -void func_80159698(void *a0) { - D_80184444[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184264)); - func_80028620(1, &(*(u8 *)&D_80184264) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184264) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801844E8[])(void); - -void func_80159968(void *a0) { - D_801844E8[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8018463C[])(void); - -void func_80159B70(void *a0) { - D_8018463C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184458; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184458); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184644[])(void); - -void func_8015A264(void *a0) { - D_80184644[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184468; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184468); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801844F4[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80184478; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801844F4[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184478)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801844F4[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184488 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184488; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184488); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8018464C[])(void); - -void func_8015AD3C(void *a0) { - D_8018464C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8015444C.c b/src/ov_SC06_030/ov_SC06_030_jr_8015444C.c new file mode 100644 index 000000000..c26875c04 --- /dev/null +++ b/src/ov_SC06_030/ov_SC06_030_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184390; +extern u8 D_80184300; +extern u8 D_801842DC; +extern u8 D_801842B8; +extern u8 D_8018436C; +extern u8 D_80184348; +extern u8 D_80184324; +extern u8 D_80184294; +extern void func_80145934(void); +extern u8 D_80184420; +extern u8 D_801843FC; +extern u8 D_801843D8; +extern u8 D_801843B4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183818[]; +extern unsigned char D_80183848[]; +extern unsigned char D_80183898[]; +extern unsigned char D_801838C8[]; +extern unsigned char D_801838F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183948[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A10[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A98[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183AA0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8C90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B8C94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AD0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B78[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B9C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B8C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BB0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BBC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BCC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BE4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BD4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BF8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C14[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183C04; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C28[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C3C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C50; +extern void (*D_80183C78[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C58; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183C84[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183C84[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183CC4[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183CC4[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80183CC8[])(void); + +void func_80155580(void *a0) { + D_80183CC8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80183EBC[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80183EBC[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8018412C indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8018412C[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8018412C[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8018413C[])(void); + +void func_80157544(void *a0) { + D_8018413C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801B8CC8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801B8CC8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801B8CC8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184164[])(void); +extern int D_801B8CC8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184164[*(unsigned short *)((char *)param_1 + 2)](); + D_801B8CC8 = D_801B8CC8 - 1; + if (D_801B8CC8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184144; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184144); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184154; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184154); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801841A4[])(void); + +void func_80157DC4(void *a0) { + D_801841A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801841AC[])(void); + +void func_80157FC4(void *a0) { + D_801841AC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80184178; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80184178); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801841B8[])(void); + +void func_8015824C(void *a0) { + D_801841B8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80184188; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80184188); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801B8CD0; +extern s32 D_801B8CDC; +extern s32 D_801B8CE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801B8CD0 = 0; + D_801B8CDC = 1; + D_801B8CE0 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801B8CD0; +extern s32 D_801B8CDC; +extern s32 D_801B8CE0; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801B8CD0 = 0; + D_801B8CDC = 1; + D_801B8CE0 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801841F4[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801841F4[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801B8CD0; + +void func_80158BB0(void *arg0) { + if (D_801B8CD0 == 0) { + D_801B8CD0 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801B8CDC; +extern s32 D_801841C8[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801B8CDC; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801841C8[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801B8CE0; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801B8CE0 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8CD0; +extern s32 D_801B8CD8; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801B8CD0 == 4) { + D_801B8CD0 = 5; + } + if (D_801B8CD8 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184230[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184230; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_801594E8); + + +extern void (*D_80184444[])(void); + +void func_80159698(void *a0) { + D_80184444[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184264)); + func_80028620(1, &(*(u8 *)&D_80184264) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184264) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801844E8[])(void); + +void func_80159968(void *a0) { + D_801844E8[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8018463C[])(void); + +void func_80159B70(void *a0) { + D_8018463C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184458; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184458); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184644[])(void); + +void func_8015A264(void *a0) { + D_80184644[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184468; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184468); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8015A3C8.c b/src/ov_SC06_030/ov_SC06_030_jr_8015A3C8.c new file mode 100644 index 000000000..761ee2e6d --- /dev/null +++ b/src/ov_SC06_030/ov_SC06_030_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184390; +extern u8 D_80184300; +extern u8 D_801842DC; +extern u8 D_801842B8; +extern u8 D_8018436C; +extern u8 D_80184348; +extern u8 D_80184324; +extern u8 D_80184294; +extern void func_80145934(void); +extern u8 D_80184420; +extern u8 D_801843FC; +extern u8 D_801843D8; +extern u8 D_801843B4; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80183818[]; +extern unsigned char D_80183848[]; +extern unsigned char D_80183898[]; +extern unsigned char D_801838C8[]; +extern unsigned char D_801838F8[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80183948[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80183A10[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80183A98[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183AA0; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801B8C90; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801B8C94; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80183AD0; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80183B78[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183B9C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183B8C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183BB0[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183BBC[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80183BCC[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80183BE4[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80183BD4; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80183BF8[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80183C14[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80183C04; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80183C28[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183C3C[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183C50; +extern void (*D_80183C78[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80183C58; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183CC4[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80183CC8[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018412C[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018413C[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801B8CC8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184164[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184144; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184154; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801841A4[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801841AC[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80184178; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801841B8[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80184188; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801B8CD0; +extern s32 D_801B8CDC; +extern s32 D_801B8CE0; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801841F4[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801841C8[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801B8CD8; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184444[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184264[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801844E8[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018463C[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184458; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184644[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184468; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801844F4[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80184478; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801844F4[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184478)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801844F4[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184488 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184488; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184488); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8018464C[])(void); + +void func_8015AD3C(void *a0) { + D_8018464C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_032/ov_SC06_032_after.c b/src/ov_SC06_032/ov_SC06_032_after.c index 241d54f3a..0e2a67036 100644 --- a/src/ov_SC06_032/ov_SC06_032_after.c +++ b/src/ov_SC06_032/ov_SC06_032_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_032/nonmatchings/ov_SC06_032_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80195150[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80195150[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80195190[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80195190[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80195194[])(void); - -void func_80155580(void *a0) { - D_80195194[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80195388[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80195388[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801955F8 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_801955F8[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_801955F8[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80195608[])(void); - -void func_80157544(void *a0) { - D_80195608[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CF378; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CF378 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CF378 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80195630[])(void); -extern int D_801CF378; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80195630[*(unsigned short *)((char *)param_1 + 2)](); - D_801CF378 = D_801CF378 - 1; - if (D_801CF378 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80195610; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80195610); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80195620; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80195620); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80195670[])(void); - -void func_80157DC4(void *a0) { - D_80195670[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80195678[])(void); - -void func_80157FC4(void *a0) { - D_80195678[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80195644; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80195644); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80195684[])(void); - -void func_8015824C(void *a0) { - D_80195684[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80195654; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80195654); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CF380; -extern s32 D_801CF38C; -extern s32 D_801CF390; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CF380 = 0; - D_801CF38C = 1; - D_801CF390 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CF380; -extern s32 D_801CF38C; -extern s32 D_801CF390; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CF380 = 0; - D_801CF38C = 1; - D_801CF390 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801956C0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801956C0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CF380; - -void func_80158BB0(void *arg0) { - if (D_801CF380 == 0) { - D_801CF380 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CF38C; -extern s32 D_80195694[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CF38C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80195694[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CF390; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CF390 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CF380; -extern s32 D_801CF388; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CF380 == 4) { - D_801CF380 = 5; - } - if (D_801CF388 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_801956FC[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_801956FC; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_801594E8); - - -extern void (*D_80195910[])(void); - -void func_80159698(void *a0) { - D_80195910[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80195730)); - func_80028620(1, &(*(u8 *)&D_80195730) + 0x10); - func_80028620(2, &(*(u8 *)&D_80195730) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_801959B4[])(void); - -void func_80159968(void *a0) { - D_801959B4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80195B08[])(void); - -void func_80159B70(void *a0) { - D_80195B08[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80195924; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80195924); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80195B10[])(void); - -void func_8015A264(void *a0) { - D_80195B10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80195934; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80195934); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_801959C0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80195944[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_801959C0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80195944)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_801959C0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80195954 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80195954; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80195954); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80195B18[])(void); - -void func_8015AD3C(void *a0) { - D_80195B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8015444C.c b/src/ov_SC06_032/ov_SC06_032_jr_8015444C.c new file mode 100644 index 000000000..acf6885d4 --- /dev/null +++ b/src/ov_SC06_032/ov_SC06_032_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8019585C; +extern u8 D_801957CC; +extern u8 D_801957A8; +extern u8 D_80195784; +extern u8 D_80195838; +extern u8 D_80195814; +extern u8 D_801957F0; +extern u8 D_80195760; +extern void func_80145934(void); +extern u8 D_801958EC; +extern u8 D_801958C8; +extern u8 D_801958A4; +extern u8 D_80195880; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194CE4[]; +extern unsigned char D_80194D14[]; +extern unsigned char D_80194D64[]; +extern unsigned char D_80194D94[]; +extern unsigned char D_80194DC4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80194E14[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80194EDC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80194F64[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80194F6C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80194F9C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80195044[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195068[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195058; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019507C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195088[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195098[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801950B0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801950A0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801950C4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801950E0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801950D0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801950F4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80195108[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019511C; +extern void (*D_80195144[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80195124; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80195150[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80195150[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80195190[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80195190[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80195194[])(void); + +void func_80155580(void *a0) { + D_80195194[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80195388[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80195388[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_801955F8 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_801955F8[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_801955F8[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80195608[])(void); + +void func_80157544(void *a0) { + D_80195608[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CF378; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CF378 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CF378 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80195630[])(void); +extern int D_801CF378; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80195630[*(unsigned short *)((char *)param_1 + 2)](); + D_801CF378 = D_801CF378 - 1; + if (D_801CF378 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80195610; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80195610); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80195620; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80195620); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80195670[])(void); + +void func_80157DC4(void *a0) { + D_80195670[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80195678[])(void); + +void func_80157FC4(void *a0) { + D_80195678[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80195644; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80195644); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80195684[])(void); + +void func_8015824C(void *a0) { + D_80195684[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80195654; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80195654); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CF380; +extern s32 D_801CF38C; +extern s32 D_801CF390; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CF380 = 0; + D_801CF38C = 1; + D_801CF390 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CF380; +extern s32 D_801CF38C; +extern s32 D_801CF390; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CF380 = 0; + D_801CF38C = 1; + D_801CF390 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801956C0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801956C0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CF380; + +void func_80158BB0(void *arg0) { + if (D_801CF380 == 0) { + D_801CF380 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CF38C; +extern s32 D_80195694[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CF38C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80195694[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CF390; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CF390 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF380; +extern s32 D_801CF388; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CF380 == 4) { + D_801CF380 = 5; + } + if (D_801CF388 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_801956FC[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_801956FC; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_801594E8); + + +extern void (*D_80195910[])(void); + +void func_80159698(void *a0) { + D_80195910[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80195730)); + func_80028620(1, &(*(u8 *)&D_80195730) + 0x10); + func_80028620(2, &(*(u8 *)&D_80195730) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_801959B4[])(void); + +void func_80159968(void *a0) { + D_801959B4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80195B08[])(void); + +void func_80159B70(void *a0) { + D_80195B08[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80195924; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80195924); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80195B10[])(void); + +void func_8015A264(void *a0) { + D_80195B10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80195934; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80195934); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_032/ov_SC06_032_jr_8015A3C8.c b/src/ov_SC06_032/ov_SC06_032_jr_8015A3C8.c new file mode 100644 index 000000000..688276d32 --- /dev/null +++ b/src/ov_SC06_032/ov_SC06_032_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8019585C; +extern u8 D_801957CC; +extern u8 D_801957A8; +extern u8 D_80195784; +extern u8 D_80195838; +extern u8 D_80195814; +extern u8 D_801957F0; +extern u8 D_80195760; +extern void func_80145934(void); +extern u8 D_801958EC; +extern u8 D_801958C8; +extern u8 D_801958A4; +extern u8 D_80195880; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80194CE4[]; +extern unsigned char D_80194D14[]; +extern unsigned char D_80194D64[]; +extern unsigned char D_80194D94[]; +extern unsigned char D_80194DC4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80194E14[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80194EDC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80194F64[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80194F6C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF340; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF344; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80194F9C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80195044[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80195068[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80195058; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019507C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80195088[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_80195098[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801950B0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801950A0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801950C4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801950E0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801950D0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801950F4[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80195108[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019511C; +extern void (*D_80195144[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80195124; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80195190[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80195194[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_801955F8[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80195608[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CF378; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80195630[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80195610; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80195620; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80195670[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80195678[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80195644; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80195684[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80195654; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CF380; +extern s32 D_801CF38C; +extern s32 D_801CF390; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801956C0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80195694[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF388; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80195910[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80195730[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_801959B4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80195B08[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80195924; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80195B10[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80195934; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_801959C0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80195944[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_801959C0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80195944)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_801959C0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80195954 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80195954; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80195954); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80195B18[])(void); + +void func_8015AD3C(void *a0) { + D_80195B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC06_033/ov_SC06_033_after.c b/src/ov_SC06_033/ov_SC06_033_after.c index 63ccd9f66..9014c3e21 100644 --- a/src/ov_SC06_033/ov_SC06_033_after.c +++ b/src/ov_SC06_033/ov_SC06_033_after.c @@ -2616,1309 +2616,3 @@ 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_SC06_033/nonmatchings/ov_SC06_033_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", 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) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80193660[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80193660[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801936A0[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801936A0[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801936A4[])(void); - -void func_80155580(void *a0) { - D_801936A4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80193898[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80193898[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80193B08 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80193B08[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80193B08[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80193B18[])(void); - -void func_80157544(void *a0) { - D_80193B18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CF438; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CF438 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CF438 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80193B40[])(void); -extern int D_801CF438; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80193B40[*(unsigned short *)((char *)param_1 + 2)](); - D_801CF438 = D_801CF438 - 1; - if (D_801CF438 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80193B20; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80193B20); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80193B30; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80193B30); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80193B80[])(void); - -void func_80157DC4(void *a0) { - D_80193B80[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80193B88[])(void); - -void func_80157FC4(void *a0) { - D_80193B88[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80193B54; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80193B54); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80193B94[])(void); - -void func_8015824C(void *a0) { - D_80193B94[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80193B64; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80193B64); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CF440; -extern s32 D_801CF44C; -extern s32 D_801CF450; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CF440 = 0; - D_801CF44C = 1; - D_801CF450 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CF440; -extern s32 D_801CF44C; -extern s32 D_801CF450; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CF440 = 0; - D_801CF44C = 1; - D_801CF450 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80193BD0[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80193BD0[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CF440; - -void func_80158BB0(void *arg0) { - if (D_801CF440 == 0) { - D_801CF440 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CF44C; -extern s32 D_80193BA4[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CF44C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80193BA4[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CF450; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CF450 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CF440; -extern s32 D_801CF448; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CF440 == 4) { - D_801CF440 = 5; - } - if (D_801CF448 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80193C0C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80193C0C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_801594E8); - - -extern void (*D_80193E20[])(void); - -void func_80159698(void *a0) { - D_80193E20[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80193C40)); - func_80028620(1, &(*(u8 *)&D_80193C40) + 0x10); - func_80028620(2, &(*(u8 *)&D_80193C40) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80193EC4[])(void); - -void func_80159968(void *a0) { - D_80193EC4[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80194018[])(void); - -void func_80159B70(void *a0) { - D_80194018[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80193E34; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80193E34); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80194020[])(void); - -void func_8015A264(void *a0) { - D_80194020[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80193E44; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80193E44); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80193ED0[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_80193E54; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80193ED0[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80193E54); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80193ED0[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80193E64 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80193E64; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80193E64); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80194028[])(void); - -void func_8015AD3C(void *a0) { - D_80194028[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8015444C.c b/src/ov_SC06_033/ov_SC06_033_jr_8015444C.c new file mode 100644 index 000000000..9d3a69921 --- /dev/null +++ b/src/ov_SC06_033/ov_SC06_033_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193D6C; +extern u8 D_80193CDC; +extern u8 D_80193CB8; +extern u8 D_80193C94; +extern u8 D_80193D48; +extern u8 D_80193D24; +extern u8 D_80193D00; +extern u8 D_80193C70; +extern void func_80145934(void); +extern u8 D_80193DFC; +extern u8 D_80193DD8; +extern u8 D_80193DB4; +extern u8 D_80193D90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801931F4[]; +extern unsigned char D_80193224[]; +extern unsigned char D_80193274[]; +extern unsigned char D_801932A4[]; +extern unsigned char D_801932D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80193324[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801933EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80193474[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019347C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801934AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80193554[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80193578[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80193568; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019358C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80193598[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801935A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801935C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801935B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801935D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801935F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801935E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80193604[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80193618[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019362C; +extern void (*D_80193654[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80193634; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80193660[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80193660[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801936A0[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801936A0[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801936A4[])(void); + +void func_80155580(void *a0) { + D_801936A4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80193898[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80193898[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80193B08 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80193B08[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80193B08[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80193B18[])(void); + +void func_80157544(void *a0) { + D_80193B18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CF438; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CF438 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CF438 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80193B40[])(void); +extern int D_801CF438; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80193B40[*(unsigned short *)((char *)param_1 + 2)](); + D_801CF438 = D_801CF438 - 1; + if (D_801CF438 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80193B20; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80193B20); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80193B30; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80193B30); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80193B80[])(void); + +void func_80157DC4(void *a0) { + D_80193B80[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80193B88[])(void); + +void func_80157FC4(void *a0) { + D_80193B88[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80193B54; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80193B54); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80193B94[])(void); + +void func_8015824C(void *a0) { + D_80193B94[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80193B64; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80193B64); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CF440; +extern s32 D_801CF44C; +extern s32 D_801CF450; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CF440 = 0; + D_801CF44C = 1; + D_801CF450 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CF440; +extern s32 D_801CF44C; +extern s32 D_801CF450; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CF440 = 0; + D_801CF44C = 1; + D_801CF450 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80193BD0[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80193BD0[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CF440; + +void func_80158BB0(void *arg0) { + if (D_801CF440 == 0) { + D_801CF440 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CF44C; +extern s32 D_80193BA4[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CF44C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80193BA4[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CF450; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CF450 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF440; +extern s32 D_801CF448; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CF440 == 4) { + D_801CF440 = 5; + } + if (D_801CF448 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80193C0C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80193C0C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_801594E8); + + +extern void (*D_80193E20[])(void); + +void func_80159698(void *a0) { + D_80193E20[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80193C40)); + func_80028620(1, &(*(u8 *)&D_80193C40) + 0x10); + func_80028620(2, &(*(u8 *)&D_80193C40) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80193EC4[])(void); + +void func_80159968(void *a0) { + D_80193EC4[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80194018[])(void); + +void func_80159B70(void *a0) { + D_80194018[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80193E34; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80193E34); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80194020[])(void); + +void func_8015A264(void *a0) { + D_80194020[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80193E44; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80193E44); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC06_033/ov_SC06_033_jr_8015A3C8.c b/src/ov_SC06_033/ov_SC06_033_jr_8015A3C8.c new file mode 100644 index 000000000..24b808b2c --- /dev/null +++ b/src/ov_SC06_033/ov_SC06_033_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80193D6C; +extern u8 D_80193CDC; +extern u8 D_80193CB8; +extern u8 D_80193C94; +extern u8 D_80193D48; +extern u8 D_80193D24; +extern u8 D_80193D00; +extern u8 D_80193C70; +extern void func_80145934(void); +extern u8 D_80193DFC; +extern u8 D_80193DD8; +extern u8 D_80193DB4; +extern u8 D_80193D90; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801931F4[]; +extern unsigned char D_80193224[]; +extern unsigned char D_80193274[]; +extern unsigned char D_801932A4[]; +extern unsigned char D_801932D4[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_80193324[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801933EC[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80193474[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8019347C; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CF400; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CF404; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801934AC; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80193554[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80193578[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80193568; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8019358C[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80193598[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801935A8[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801935C0[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801935B0; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801935D4[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801935F0[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801935E0; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_80193604[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80193618[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8019362C; +extern void (*D_80193654[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_80193634; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801936A0[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801936A4[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80193B08[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80193B18[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CF438; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80193B40[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80193B20; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80193B30; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80193B80[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80193B88[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80193B54; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80193B94[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80193B64; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CF440; +extern s32 D_801CF44C; +extern s32 D_801CF450; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80193BD0[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80193BA4[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CF448; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80193E20[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80193C40[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80193EC4[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80194018[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80193E34; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80194020[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80193E44; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80193ED0[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_80193E54; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80193ED0[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_80193E54); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80193ED0[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80193E64 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80193E64; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80193E64); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80194028[])(void); + +void func_8015AD3C(void *a0) { + D_80194028[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC07_000/ov_SC07_000_after.c b/src/ov_SC07_000/ov_SC07_000_after.c index ec08606c6..05f187a63 100644 --- a/src/ov_SC07_000/ov_SC07_000_after.c +++ b/src/ov_SC07_000/ov_SC07_000_after.c @@ -2616,1309 +2616,3 @@ 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_000/nonmatchings/ov_SC07_000_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", 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) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_801844A8[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_801844A8[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_801844E8[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_801844E8[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_801844EC[])(void); - -void func_80155580(void *a0) { - D_801844EC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_801846E0[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_801846E0[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184950 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80184950[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80184950[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80184960[])(void); - -void func_80157544(void *a0) { - D_80184960[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801CE980; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801CE980 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801CE980 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80184988[])(void); -extern int D_801CE980; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80184988[*(unsigned short *)((char *)param_1 + 2)](); - D_801CE980 = D_801CE980 - 1; - if (D_801CE980 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80184968; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184968); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80184978; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184978); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801849C8[])(void); - -void func_80157DC4(void *a0) { - D_801849C8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801849D0[])(void); - -void func_80157FC4(void *a0) { - D_801849D0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018499C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018499C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_801849DC[])(void); - -void func_8015824C(void *a0) { - D_801849DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801849AC; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801849AC); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801CE988; -extern s32 D_801CE994; -extern s32 D_801CE998; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801CE988 = 0; - D_801CE994 = 1; - D_801CE998 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801CE988; -extern s32 D_801CE994; -extern s32 D_801CE998; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801CE988 = 0; - D_801CE994 = 1; - D_801CE998 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80184A18[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80184A18[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801CE988; - -void func_80158BB0(void *arg0) { - if (D_801CE988 == 0) { - D_801CE988 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801CE994; -extern s32 D_801849EC[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801CE994; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_801849EC[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801CE998; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801CE998 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801CE988; -extern s32 D_801CE990; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801CE988 == 4) { - D_801CE988 = 5; - } - if (D_801CE990 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80184A54[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80184A54; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_801594E8); - - -extern void (*D_80184C68[])(void); - -void func_80159698(void *a0) { - D_80184C68[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80184A88)); - func_80028620(1, &(*(u8 *)&D_80184A88) + 0x10); - func_80028620(2, &(*(u8 *)&D_80184A88) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80184D0C[])(void); - -void func_80159968(void *a0) { - D_80184D0C[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80184E60[])(void); - -void func_80159B70(void *a0) { - D_80184E60[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80184C7C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184C7C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80184E68[])(void); - -void func_8015A264(void *a0) { - D_80184E68[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80184C8C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184C8C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80184D18[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s16 D_80184C9C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80184D18[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184C9C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80184D18[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184CAC arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80184CAC; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80184CAC); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80184E70[])(void); - -void func_8015AD3C(void *a0) { - D_80184E70[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8015444C.c b/src/ov_SC07_000/ov_SC07_000_jr_8015444C.c new file mode 100644 index 000000000..37864c464 --- /dev/null +++ b/src/ov_SC07_000/ov_SC07_000_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184BB4; +extern u8 D_80184B24; +extern u8 D_80184B00; +extern u8 D_80184ADC; +extern u8 D_80184B90; +extern u8 D_80184B6C; +extern u8 D_80184B48; +extern u8 D_80184AB8; +extern void func_80145934(void); +extern u8 D_80184C44; +extern u8 D_80184C20; +extern u8 D_80184BFC; +extern u8 D_80184BD8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018403C[]; +extern unsigned char D_8018406C[]; +extern unsigned char D_801840BC[]; +extern unsigned char D_801840EC[]; +extern unsigned char D_8018411C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018416C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184234[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801842BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801842C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CE948; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CE94C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801842F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018439C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801843C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801843B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801843D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801843E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801843F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184408[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801843F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018441C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184438[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184428; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018444C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184460[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184474; +extern void (*D_8018449C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018447C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_801844A8[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_801844A8[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_801844E8[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_801844E8[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_801844EC[])(void); + +void func_80155580(void *a0) { + D_801844EC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_801846E0[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_801846E0[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80184950 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80184950[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80184950[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80184960[])(void); + +void func_80157544(void *a0) { + D_80184960[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801CE980; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801CE980 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801CE980 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80184988[])(void); +extern int D_801CE980; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80184988[*(unsigned short *)((char *)param_1 + 2)](); + D_801CE980 = D_801CE980 - 1; + if (D_801CE980 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184968; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80184968); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80184978; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80184978); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801849C8[])(void); + +void func_80157DC4(void *a0) { + D_801849C8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801849D0[])(void); + +void func_80157FC4(void *a0) { + D_801849D0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018499C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018499C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_801849DC[])(void); + +void func_8015824C(void *a0) { + D_801849DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801849AC; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801849AC); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801CE988; +extern s32 D_801CE994; +extern s32 D_801CE998; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801CE988 = 0; + D_801CE994 = 1; + D_801CE998 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801CE988; +extern s32 D_801CE994; +extern s32 D_801CE998; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801CE988 = 0; + D_801CE994 = 1; + D_801CE998 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80184A18[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80184A18[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801CE988; + +void func_80158BB0(void *arg0) { + if (D_801CE988 == 0) { + D_801CE988 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801CE994; +extern s32 D_801849EC[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801CE994; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_801849EC[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801CE998; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801CE998 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801CE988; +extern s32 D_801CE990; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801CE988 == 4) { + D_801CE988 = 5; + } + if (D_801CE990 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80184A54[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80184A54; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_801594E8); + + +extern void (*D_80184C68[])(void); + +void func_80159698(void *a0) { + D_80184C68[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80184A88)); + func_80028620(1, &(*(u8 *)&D_80184A88) + 0x10); + func_80028620(2, &(*(u8 *)&D_80184A88) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80184D0C[])(void); + +void func_80159968(void *a0) { + D_80184D0C[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80184E60[])(void); + +void func_80159B70(void *a0) { + D_80184E60[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80184C7C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80184C7C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80184E68[])(void); + +void func_8015A264(void *a0) { + D_80184E68[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80184C8C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80184C8C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8015A3C8.c b/src/ov_SC07_000/ov_SC07_000_jr_8015A3C8.c new file mode 100644 index 000000000..90d642957 --- /dev/null +++ b/src/ov_SC07_000/ov_SC07_000_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80184BB4; +extern u8 D_80184B24; +extern u8 D_80184B00; +extern u8 D_80184ADC; +extern u8 D_80184B90; +extern u8 D_80184B6C; +extern u8 D_80184B48; +extern u8 D_80184AB8; +extern void func_80145934(void); +extern u8 D_80184C44; +extern u8 D_80184C20; +extern u8 D_80184BFC; +extern u8 D_80184BD8; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018403C[]; +extern unsigned char D_8018406C[]; +extern unsigned char D_801840BC[]; +extern unsigned char D_801840EC[]; +extern unsigned char D_8018411C[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018416C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_80184234[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_801842BC[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_801842C4; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801CE948; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801CE94C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801842F4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018439C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_801843C0[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_801843B0; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_801843D4[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_801843E0[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801843F0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80184408[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801843F8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018441C[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_80184438[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80184428; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018444C[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80184460[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80184474; +extern void (*D_8018449C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018447C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_801844E8[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_801844EC[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80184950[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80184960[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801CE980; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80184988[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80184968; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80184978; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801849C8[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801849D0[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018499C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_801849DC[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801849AC; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801CE988; +extern s32 D_801CE994; +extern s32 D_801CE998; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80184A18[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_801849EC[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801CE990; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80184C68[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80184A88[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80184D0C[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80184E60[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80184C7C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80184E68[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80184C8C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80184D18[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s16 D_80184C9C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80184D18[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80184C9C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80184D18[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80184CAC arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80184CAC; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80184CAC); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80184E70[])(void); + +void func_8015AD3C(void *a0) { + D_80184E70[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC07_001/ov_SC07_001_after.c b/src/ov_SC07_001/ov_SC07_001_after.c index 5a5a227cb..3b72e2655 100644 --- a/src/ov_SC07_001/ov_SC07_001_after.c +++ b/src/ov_SC07_001/ov_SC07_001_after.c @@ -2616,1309 +2616,3 @@ 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_001/nonmatchings/ov_SC07_001_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", 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) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80183358[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80183358[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80183398[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80183398[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8018339C[])(void); - -void func_80155580(void *a0) { - D_8018339C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_80183590[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_80183590[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183800 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80183800[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80183800[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80183810[])(void); - -void func_80157544(void *a0) { - D_80183810[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A9A30; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A9A30 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A9A30 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80183838[])(void); -extern int D_801A9A30; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80183838[*(unsigned short *)((char *)param_1 + 2)](); - D_801A9A30 = D_801A9A30 - 1; - if (D_801A9A30 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80183818; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183818); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80183828; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183828); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80183878[])(void); - -void func_80157DC4(void *a0) { - D_80183878[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80183880[])(void); - -void func_80157FC4(void *a0) { - D_80183880[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8018384C; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8018384C); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8018388C[])(void); - -void func_8015824C(void *a0) { - D_8018388C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8018385C; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018385C); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A9A38; -extern s32 D_801A9A44; -extern s32 D_801A9A48; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A9A38 = 0; - D_801A9A44 = 1; - D_801A9A48 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A9A38; -extern s32 D_801A9A44; -extern s32 D_801A9A48; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A9A38 = 0; - D_801A9A44 = 1; - D_801A9A48 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_801838C8[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_801838C8[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A9A38; - -void func_80158BB0(void *arg0) { - if (D_801A9A38 == 0) { - D_801A9A38 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A9A44; -extern s32 D_8018389C[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A9A44; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018389C[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A9A48; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A9A48 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A9A38; -extern s32 D_801A9A40; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A9A38 == 4) { - D_801A9A38 = 5; - } - if (D_801A9A40 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80183904[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80183904; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_801594E8); - - -extern void (*D_80183B18[])(void); - -void func_80159698(void *a0) { - D_80183B18[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80183938)); - func_80028620(1, &(*(u8 *)&D_80183938) + 0x10); - func_80028620(2, &(*(u8 *)&D_80183938) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80183BBC[])(void); - -void func_80159968(void *a0) { - D_80183BBC[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80183D10[])(void); - -void func_80159B70(void *a0) { - D_80183D10[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80183B2C; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183B2C); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80183D18[])(void); - -void func_8015A264(void *a0) { - D_80183D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80183B3C; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183B3C); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80183BC8[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern unsigned char D_80183B4C[]; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80183BC8[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183B4C)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80183BC8[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183B5C arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80183B5C; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80183B5C); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80183D20[])(void); - -void func_8015AD3C(void *a0) { - D_80183D20[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8015444C.c b/src/ov_SC07_001/ov_SC07_001_jr_8015444C.c new file mode 100644 index 000000000..09e17bb37 --- /dev/null +++ b/src/ov_SC07_001/ov_SC07_001_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183A64; +extern u8 D_801839D4; +extern u8 D_801839B0; +extern u8 D_8018398C; +extern u8 D_80183A40; +extern u8 D_80183A1C; +extern u8 D_801839F8; +extern u8 D_80183968; +extern void func_80145934(void); +extern u8 D_80183AF4; +extern u8 D_80183AD0; +extern u8 D_80183AAC; +extern u8 D_80183A88; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182EEC[]; +extern unsigned char D_80182F1C[]; +extern unsigned char D_80182F6C[]; +extern unsigned char D_80182F9C[]; +extern unsigned char D_80182FCC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018301C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801830E4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018316C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183174; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A99F8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A99FC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801831A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018324C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183270[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183260; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183284[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183290[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801832A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801832B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801832A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801832CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801832E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801832D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801832FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183310[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183324; +extern void (*D_8018334C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018332C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80183358[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80183358[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80183398[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80183398[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8018339C[])(void); + +void func_80155580(void *a0) { + D_8018339C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_80183590[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_80183590[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80183800 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80183800[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80183800[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80183810[])(void); + +void func_80157544(void *a0) { + D_80183810[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A9A30; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A9A30 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A9A30 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80183838[])(void); +extern int D_801A9A30; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80183838[*(unsigned short *)((char *)param_1 + 2)](); + D_801A9A30 = D_801A9A30 - 1; + if (D_801A9A30 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183818; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80183818); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80183828; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80183828); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80183878[])(void); + +void func_80157DC4(void *a0) { + D_80183878[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80183880[])(void); + +void func_80157FC4(void *a0) { + D_80183880[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8018384C; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8018384C); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8018388C[])(void); + +void func_8015824C(void *a0) { + D_8018388C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8018385C; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8018385C); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A9A38; +extern s32 D_801A9A44; +extern s32 D_801A9A48; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A9A38 = 0; + D_801A9A44 = 1; + D_801A9A48 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A9A38; +extern s32 D_801A9A44; +extern s32 D_801A9A48; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A9A38 = 0; + D_801A9A44 = 1; + D_801A9A48 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_801838C8[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_801838C8[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A9A38; + +void func_80158BB0(void *arg0) { + if (D_801A9A38 == 0) { + D_801A9A38 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A9A44; +extern s32 D_8018389C[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A9A44; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8018389C[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A9A48; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A9A48 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A9A38; +extern s32 D_801A9A40; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A9A38 == 4) { + D_801A9A38 = 5; + } + if (D_801A9A40 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80183904[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80183904; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_801594E8); + + +extern void (*D_80183B18[])(void); + +void func_80159698(void *a0) { + D_80183B18[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80183938)); + func_80028620(1, &(*(u8 *)&D_80183938) + 0x10); + func_80028620(2, &(*(u8 *)&D_80183938) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80183BBC[])(void); + +void func_80159968(void *a0) { + D_80183BBC[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80183D10[])(void); + +void func_80159B70(void *a0) { + D_80183D10[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80183B2C; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80183B2C); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80183D18[])(void); + +void func_8015A264(void *a0) { + D_80183D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80183B3C; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80183B3C); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC07_001/ov_SC07_001_jr_8015A3C8.c b/src/ov_SC07_001/ov_SC07_001_jr_8015A3C8.c new file mode 100644 index 000000000..77b959c07 --- /dev/null +++ b/src/ov_SC07_001/ov_SC07_001_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80183A64; +extern u8 D_801839D4; +extern u8 D_801839B0; +extern u8 D_8018398C; +extern u8 D_80183A40; +extern u8 D_80183A1C; +extern u8 D_801839F8; +extern u8 D_80183968; +extern void func_80145934(void); +extern u8 D_80183AF4; +extern u8 D_80183AD0; +extern u8 D_80183AAC; +extern u8 D_80183A88; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_80182EEC[]; +extern unsigned char D_80182F1C[]; +extern unsigned char D_80182F6C[]; +extern unsigned char D_80182F9C[]; +extern unsigned char D_80182FCC[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018301C[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801830E4[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018316C[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80183174; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A99F8; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A99FC; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_801831A4; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018324C[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_80183270[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_80183260; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80183284[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_80183290[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_801832A0[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_801832B8[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_801832A8; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_801832CC[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801832E8[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_801832D8; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801832FC[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_80183310[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_80183324; +extern void (*D_8018334C[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018332C; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80183398[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018339C[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80183800[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80183810[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A9A30; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80183838[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80183818; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80183828; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80183878[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80183880[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018384C; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018388C[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018385C; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A9A38; +extern s32 D_801A9A44; +extern s32 D_801A9A48; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_801838C8[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018389C[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A9A40; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80183B18[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80183938[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80183BBC[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80183D10[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80183B2C; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80183D18[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80183B3C; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80183BC8[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern unsigned char D_80183B4C[]; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80183BC8[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80183B4C)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80183BC8[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80183B5C arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80183B5C; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80183B5C); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80183D20[])(void); + +void func_8015AD3C(void *a0) { + D_80183D20[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC07_002/ov_SC07_002_after.c b/src/ov_SC07_002/ov_SC07_002_after.c index c0cb91d11..adb4d52cf 100644 --- a/src/ov_SC07_002/ov_SC07_002_after.c +++ b/src/ov_SC07_002/ov_SC07_002_after.c @@ -2616,1309 +2616,3 @@ 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_002/nonmatchings/ov_SC07_002_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", 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) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_80188614[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_80188614[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_80188654[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_80188654[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_80188658[])(void); - -void func_80155580(void *a0) { - D_80188658[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8018884C[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8018884C[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188ABC indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80188ABC[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80188ABC[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80188ACC[])(void); - -void func_80157544(void *a0) { - D_80188ACC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_8019A580; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_8019A580 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_8019A580 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_80188AF4[])(void); -extern int D_8019A580; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_80188AF4[*(unsigned short *)((char *)param_1 + 2)](); - D_8019A580 = D_8019A580 - 1; - if (D_8019A580 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80188AD4; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188AD4); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_80188AE4; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188AE4); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_80188B34[])(void); - -void func_80157DC4(void *a0) { - D_80188B34[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_80188B3C[])(void); - -void func_80157FC4(void *a0) { - D_80188B3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_80188B08; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_80188B08); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80188B48[])(void); - -void func_8015824C(void *a0) { - D_80188B48[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_80188B18; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188B18); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_8019A588; -extern s32 D_8019A594; -extern s32 D_8019A598; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_8019A588 = 0; - D_8019A594 = 1; - D_8019A598 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_8019A588; -extern s32 D_8019A594; -extern s32 D_8019A598; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_8019A588 = 0; - D_8019A594 = 1; - D_8019A598 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80188B84[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80188B84[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_8019A588; - -void func_80158BB0(void *arg0) { - if (D_8019A588 == 0) { - D_8019A588 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019A594; -extern s32 D_80188B58[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019A594; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188B58[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_8019A598; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_8019A598 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_8019A588; -extern s32 D_8019A590; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_8019A588 == 4) { - D_8019A588 = 5; - } - if (D_8019A590 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_80188BC0[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_80188BC0; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_801594E8); - - -extern void (*D_80188DD4[])(void); - -void func_80159698(void *a0) { - D_80188DD4[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_80188BF4)); - func_80028620(1, &(*(u8 *)&D_80188BF4) + 0x10); - func_80028620(2, &(*(u8 *)&D_80188BF4) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80188E78[])(void); - -void func_80159968(void *a0) { - D_80188E78[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80188FCC[])(void); - -void func_80159B70(void *a0) { - D_80188FCC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_80188DE8; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188DE8); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80188FD4[])(void); - -void func_8015A264(void *a0) { - D_80188FD4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_80188DF8; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188DF8); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80188E84[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_80188E08; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80188E84[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E08)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80188E84[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188E18 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80188E18; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_80188E18); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80188FDC[])(void); - -void func_8015AD3C(void *a0) { - D_80188FDC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8015444C.c b/src/ov_SC07_002/ov_SC07_002_jr_8015444C.c new file mode 100644 index 000000000..dc1b0c0b8 --- /dev/null +++ b/src/ov_SC07_002/ov_SC07_002_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D20; +extern u8 D_80188C90; +extern u8 D_80188C6C; +extern u8 D_80188C48; +extern u8 D_80188CFC; +extern u8 D_80188CD8; +extern u8 D_80188CB4; +extern u8 D_80188C24; +extern void func_80145934(void); +extern u8 D_80188DB0; +extern u8 D_80188D8C; +extern u8 D_80188D68; +extern u8 D_80188D44; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801881A8[]; +extern unsigned char D_801881D8[]; +extern unsigned char D_80188228[]; +extern unsigned char D_80188258[]; +extern unsigned char D_80188288[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801882D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801883A0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188428[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188430; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A548; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A54C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188460; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188508[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018852C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018851C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188540[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018854C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018855C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188574[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188564; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188588[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188594; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801885B8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801885CC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801885E0; +extern void (*D_80188608[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801885E8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_80188614[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_80188614[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_80188654[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_80188654[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_80188658[])(void); + +void func_80155580(void *a0) { + D_80188658[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8018884C[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8018884C[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80188ABC indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80188ABC[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80188ABC[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80188ACC[])(void); + +void func_80157544(void *a0) { + D_80188ACC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_8019A580; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_8019A580 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_8019A580 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_80188AF4[])(void); +extern int D_8019A580; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_80188AF4[*(unsigned short *)((char *)param_1 + 2)](); + D_8019A580 = D_8019A580 - 1; + if (D_8019A580 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188AD4; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80188AD4); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_80188AE4; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_80188AE4); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_80188B34[])(void); + +void func_80157DC4(void *a0) { + D_80188B34[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_80188B3C[])(void); + +void func_80157FC4(void *a0) { + D_80188B3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_80188B08; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_80188B08); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80188B48[])(void); + +void func_8015824C(void *a0) { + D_80188B48[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_80188B18; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_80188B18); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_8019A588; +extern s32 D_8019A594; +extern s32 D_8019A598; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_8019A588 = 0; + D_8019A594 = 1; + D_8019A598 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_8019A588; +extern s32 D_8019A594; +extern s32 D_8019A598; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_8019A588 = 0; + D_8019A594 = 1; + D_8019A598 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80188B84[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80188B84[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_8019A588; + +void func_80158BB0(void *arg0) { + if (D_8019A588 == 0) { + D_8019A588 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019A594; +extern s32 D_80188B58[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019A594; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80188B58[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_8019A598; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_8019A598 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A588; +extern s32 D_8019A590; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_8019A588 == 4) { + D_8019A588 = 5; + } + if (D_8019A590 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_80188BC0[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_80188BC0; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_801594E8); + + +extern void (*D_80188DD4[])(void); + +void func_80159698(void *a0) { + D_80188DD4[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_80188BF4)); + func_80028620(1, &(*(u8 *)&D_80188BF4) + 0x10); + func_80028620(2, &(*(u8 *)&D_80188BF4) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80188E78[])(void); + +void func_80159968(void *a0) { + D_80188E78[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80188FCC[])(void); + +void func_80159B70(void *a0) { + D_80188FCC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_80188DE8; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_80188DE8); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80188FD4[])(void); + +void func_8015A264(void *a0) { + D_80188FD4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_80188DF8; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_80188DF8); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8015A3C8.c b/src/ov_SC07_002/ov_SC07_002_jr_8015A3C8.c new file mode 100644 index 000000000..efd57df80 --- /dev/null +++ b/src/ov_SC07_002/ov_SC07_002_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_80188D20; +extern u8 D_80188C90; +extern u8 D_80188C6C; +extern u8 D_80188C48; +extern u8 D_80188CFC; +extern u8 D_80188CD8; +extern u8 D_80188CB4; +extern u8 D_80188C24; +extern void func_80145934(void); +extern u8 D_80188DB0; +extern u8 D_80188D8C; +extern u8 D_80188D68; +extern u8 D_80188D44; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_801881A8[]; +extern unsigned char D_801881D8[]; +extern unsigned char D_80188228[]; +extern unsigned char D_80188258[]; +extern unsigned char D_80188288[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_801882D8[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_801883A0[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_80188428[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_80188430; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_8019A548; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_8019A54C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_80188460; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_80188508[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018852C[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018851C; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_80188540[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018854C[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018855C[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_80188574[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_80188564; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_80188588[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_801885A4[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_80188594; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_801885B8[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_801885CC[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_801885E0; +extern void (*D_80188608[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_801885E8; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_80188654[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_80188658[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80188ABC[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80188ACC[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_8019A580; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_80188AF4[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80188AD4; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_80188AE4; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_80188B34[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_80188B3C[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_80188B08; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80188B48[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_80188B18; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_8019A588; +extern s32 D_8019A594; +extern s32 D_8019A598; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80188B84[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80188B58[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_8019A590; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80188DD4[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_80188BF4[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80188E78[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80188FCC[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_80188DE8; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80188FD4[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_80188DF8; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80188E84[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_80188E08; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80188E84[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_80188E08)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80188E84[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_80188E18 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80188E18; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_80188E18); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80188FDC[])(void); + +void func_8015AD3C(void *a0) { + D_80188FDC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC07_008/ov_SC07_008_after.c b/src/ov_SC07_008/ov_SC07_008_after.c index bccf43fc3..bad34322f 100644 --- a/src/ov_SC07_008/ov_SC07_008_after.c +++ b/src/ov_SC07_008/ov_SC07_008_after.c @@ -2616,1309 +2616,3 @@ 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_008/nonmatchings/ov_SC07_008_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", 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) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017F12C[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017F12C[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017F16C[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017F16C[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017F170[])(void); - -void func_80155580(void *a0) { - D_8017F170[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8017F364[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8017F364[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017F5D4 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_8017F5D4[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_8017F5D4[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_8017F5E4[])(void); - -void func_80157544(void *a0) { - D_8017F5E4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_80195468; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_80195468 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_80195468 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_8017F60C[])(void); -extern int D_80195468; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_8017F60C[*(unsigned short *)((char *)param_1 + 2)](); - D_80195468 = D_80195468 - 1; - if (D_80195468 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8017F5EC; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8017F5EC); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_8017F5FC; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_8017F5FC); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_8017F64C[])(void); - -void func_80157DC4(void *a0) { - D_8017F64C[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_8017F654[])(void); - -void func_80157FC4(void *a0) { - D_8017F654[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_8017F620; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_8017F620); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_8017F660[])(void); - -void func_8015824C(void *a0) { - D_8017F660[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_8017F630; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8017F630); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_80195470; -extern s32 D_8019547C; -extern s32 D_80195480; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_80195470 = 0; - D_8019547C = 1; - D_80195480 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_80195470; -extern s32 D_8019547C; -extern s32 D_80195480; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_80195470 = 0; - D_8019547C = 1; - D_80195480 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_8017F69C[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_8017F69C[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_80195470; - -void func_80158BB0(void *arg0) { - if (D_80195470 == 0) { - D_80195470 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_8019547C; -extern s32 D_8017F670[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_8019547C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_8017F670[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_80195480; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_80195480 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_80195470; -extern s32 D_80195478; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_80195470 == 4) { - D_80195470 = 5; - } - if (D_80195478 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8017F6D8[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8017F6D8; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_801594E8); - - -extern void (*D_8017F8EC[])(void); - -void func_80159698(void *a0) { - D_8017F8EC[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_8017F70C)); - func_80028620(1, &(*(u8 *)&D_8017F70C) + 0x10); - func_80028620(2, &(*(u8 *)&D_8017F70C) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_8017F990[])(void); - -void func_80159968(void *a0) { - D_8017F990[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_8017FAE4[])(void); - -void func_80159B70(void *a0) { - D_8017FAE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_8017F900; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_8017F900); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_8017FAEC[])(void); - -void func_8015A264(void *a0) { - D_8017FAEC[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_8017F910; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_8017F910); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_8017F99C[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern u8 D_8017F920; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_8017F99C[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8017F920)); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_8017F99C[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8017F930 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8017F930; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_8017F930); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_8017FAF4[])(void); - -void func_8015AD3C(void *a0) { - D_8017FAF4[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8015444C.c b/src/ov_SC07_008/ov_SC07_008_jr_8015444C.c new file mode 100644 index 000000000..1a7372146 --- /dev/null +++ b/src/ov_SC07_008/ov_SC07_008_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8017F838; +extern u8 D_8017F7A8; +extern u8 D_8017F784; +extern u8 D_8017F760; +extern u8 D_8017F814; +extern u8 D_8017F7F0; +extern u8 D_8017F7CC; +extern u8 D_8017F73C; +extern void func_80145934(void); +extern u8 D_8017F8C8; +extern u8 D_8017F8A4; +extern u8 D_8017F880; +extern u8 D_8017F85C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017ECC0[]; +extern unsigned char D_8017ECF0[]; +extern unsigned char D_8017ED40[]; +extern unsigned char D_8017ED70[]; +extern unsigned char D_8017EDA0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017EDF0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017EEB8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017EF40[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017EF48; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80195430; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80195434; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017EF78; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F020[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017F044[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017F034; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017F058[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017F064[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017F074[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017F08C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017F07C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017F0A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017F0BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017F0AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017F0D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017F0E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017F0F8; +extern void (*D_8017F120[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017F100; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017F12C[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017F12C[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017F16C[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017F16C[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017F170[])(void); + +void func_80155580(void *a0) { + D_8017F170[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8017F364[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8017F364[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_8017F5D4 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_8017F5D4[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_8017F5D4[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_8017F5E4[])(void); + +void func_80157544(void *a0) { + D_8017F5E4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_80195468; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_80195468 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_80195468 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_8017F60C[])(void); +extern int D_80195468; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_8017F60C[*(unsigned short *)((char *)param_1 + 2)](); + D_80195468 = D_80195468 - 1; + if (D_80195468 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017F5EC; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_8017F5EC); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_8017F5FC; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_8017F5FC); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_8017F64C[])(void); + +void func_80157DC4(void *a0) { + D_8017F64C[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_8017F654[])(void); + +void func_80157FC4(void *a0) { + D_8017F654[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_8017F620; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_8017F620); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_8017F660[])(void); + +void func_8015824C(void *a0) { + D_8017F660[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_8017F630; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_8017F630); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_80195470; +extern s32 D_8019547C; +extern s32 D_80195480; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_80195470 = 0; + D_8019547C = 1; + D_80195480 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_80195470; +extern s32 D_8019547C; +extern s32 D_80195480; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_80195470 = 0; + D_8019547C = 1; + D_80195480 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_8017F69C[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_8017F69C[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_80195470; + +void func_80158BB0(void *arg0) { + if (D_80195470 == 0) { + D_80195470 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_8019547C; +extern s32 D_8017F670[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_8019547C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_8017F670[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_80195480; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_80195480 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_80195470; +extern s32 D_80195478; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_80195470 == 4) { + D_80195470 = 5; + } + if (D_80195478 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8017F6D8[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8017F6D8; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_801594E8); + + +extern void (*D_8017F8EC[])(void); + +void func_80159698(void *a0) { + D_8017F8EC[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_8017F70C)); + func_80028620(1, &(*(u8 *)&D_8017F70C) + 0x10); + func_80028620(2, &(*(u8 *)&D_8017F70C) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_8017F990[])(void); + +void func_80159968(void *a0) { + D_8017F990[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_8017FAE4[])(void); + +void func_80159B70(void *a0) { + D_8017FAE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_8017F900; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_8017F900); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_008/nonmatchings/ov_SC07_008_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_8017FAEC[])(void); + +void func_8015A264(void *a0) { + D_8017FAEC[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_8017F910; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_8017F910); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC07_008/ov_SC07_008_jr_8015A3C8.c b/src/ov_SC07_008/ov_SC07_008_jr_8015A3C8.c new file mode 100644 index 000000000..b5c315b19 --- /dev/null +++ b/src/ov_SC07_008/ov_SC07_008_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8017F838; +extern u8 D_8017F7A8; +extern u8 D_8017F784; +extern u8 D_8017F760; +extern u8 D_8017F814; +extern u8 D_8017F7F0; +extern u8 D_8017F7CC; +extern u8 D_8017F73C; +extern void func_80145934(void); +extern u8 D_8017F8C8; +extern u8 D_8017F8A4; +extern u8 D_8017F880; +extern u8 D_8017F85C; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017ECC0[]; +extern unsigned char D_8017ECF0[]; +extern unsigned char D_8017ED40[]; +extern unsigned char D_8017ED70[]; +extern unsigned char D_8017EDA0[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017EDF0[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017EEB8[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017EF40[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017EF48; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_80195430; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_80195434; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017EF78; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017F020[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017F044[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017F034; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017F058[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017F064[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017F074[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017F08C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017F07C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017F0A0[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017F0BC[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017F0AC; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017F0D0[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017F0E4[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017F0F8; +extern void (*D_8017F120[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017F100; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017F16C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017F170[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8017F5D4[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8017F5E4[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_80195468; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8017F60C[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8017F5EC; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8017F5FC; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8017F64C[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8017F654[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8017F620; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8017F660[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8017F630; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_80195470; +extern s32 D_8019547C; +extern s32 D_80195480; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8017F69C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8017F670[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_80195478; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8017F8EC[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8017F70C[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8017F990[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8017FAE4[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8017F900; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8017FAEC[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8017F910; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_8017F99C[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern u8 D_8017F920; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_8017F99C[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&(*(s32 *)&D_8017F920)); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_8017F99C[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_8017F930 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8017F930; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_8017F930); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_8017FAF4[])(void); + +void func_8015AD3C(void *a0) { + D_8017FAF4[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ + diff --git a/src/ov_SC07_009/ov_SC07_009_after.c b/src/ov_SC07_009/ov_SC07_009_after.c index fb1affa43..4a6a659b6 100644 --- a/src/ov_SC07_009/ov_SC07_009_after.c +++ b/src/ov_SC07_009/ov_SC07_009_after.c @@ -2616,1309 +2616,3 @@ 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_009/nonmatchings/ov_SC07_009_after", func_8015444C); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", 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) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80154C24); - -DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ - -DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) - -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_800183E0(s32 a0); - -extern ImgRect8 D_8017FBD0[]; - -void func_801550FC(s32 arg0) -{ - if (arg0 & 0x40000000) { - MoveImage(&D_8017FBD0[arg0 & 0xFF], 0x200, 0x100); - } else { - ((void (*)(void))func_800183E0)(); - } -} - - -DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ - -DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ - -DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ - -DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ - -DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ - -DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ - -DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot - -extern int (*D_8017FC10[])(void); - -s32 func_80155458(s32 param_1) -{ - int idx; - - idx = *(unsigned char *)(param_1 + 0x4e); - if (idx != 0) { - idx = idx - 1; - if ((*D_8017FC10[idx])() == 0) { - *(unsigned char *)(param_1 + 0x4e) = 0; - } - } - return *(unsigned char *)(param_1 + 0x4e); -} - - -DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ - -DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ - -DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ - - -extern void (*D_8017FC14[])(void); - -void func_80155580(void *a0) { - D_8017FC14[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_801555F4); - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80155800); - -DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ - -DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ - -DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ - -DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ - -DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ - -DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ - -DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ - -DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ - -DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ - -DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ - -DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ - -DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ - -DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ - -DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80156044); - -DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ - -DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ - - - -extern S801563EC D_8017FE08[]; - -S801563EC *func_801563EC(u16 idx) { - return &D_8017FE08[idx]; -} - - -DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ - -DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ - -DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80156600); - -DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80156670); - -DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ - -DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ - -DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ - - -// @class: struct -// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180078 indexed halfword folds %lo -extern unsigned char D_8011520C[]; -extern unsigned short D_80180078[]; -extern void func_80147324(s32 arg0); - -void func_80156A1C(s32 param_1, s32 param_2) -{ - if (*(unsigned char *)(param_1 + 0xDA) == 0) { - func_80147324(D_80180078[D_8011520C[param_2]]); - *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; - } -} - - -DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ - -DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ - -DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ - -DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ - - -void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, - s32 a4, s32 a5, s32 a6, s32 a7, - s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { - func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); -} - - -DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ - -DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ - -DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ - - -extern void (*D_80180088[])(void); - -void func_80157544(void *a0) { - D_80180088[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ - -DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ - -DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ - -DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ - -DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) - -extern int D_801A2AF8; -extern void func_80147078(s32 *a0, s16 a1); -extern void func_801578C0(s32 a0); - -void func_80157788(int param_1) -{ - D_801A2AF8 = 300; - ((void (*)(int, int))func_80147078)(param_1, 7); - func_801578C0(param_1); -} - - - - - -void func_801577C8(s32 arg0) { - D_801A2AF8 = 0x12C; - func_80147078(arg0, 7); - func_80157808(arg0); -} - - - -// @class: struct -// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) - -extern void (*D_801800B0[])(void); -extern int D_801A2AF8; -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); - -void func_80157808(void *param_1) -{ - D_801800B0[*(unsigned short *)((char *)param_1 + 2)](); - D_801A2AF8 = D_801A2AF8 - 1; - if (D_801A2AF8 == -1) { - func_801599A4(param_1); - func_80159B3C(param_1); - } -} - - -DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 - -extern void func_80156648(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80147324(s32 arg0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146CA0(void *a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_80180090; - -void func_801578C0(s32 param_1) -{ - ((void (*)(void))func_80156648)(); - *(u8 *)(param_1 + 0x1AA) = 9; - func_80154274((s32 *)param_1, (s32)&D_800D5128); - ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); - func_80147324(0xC20); - ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180090); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); - ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); - ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); - ((void (*)(s32 *))func_801725A4)((s32 *)param_1); -} - - - - -// @class: other -// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only -// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves -// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT -// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 -// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. - -extern void func_80147A10(int a0, int a1); -extern void func_80147A84(int); -extern void func_801473EC(s32 *a0); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_8014ED28(s32 _arg0); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); -extern void func_80154A74(int, int); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern s32 func_801725A4(u8 *a0); - -extern unsigned char D_800D5178; -extern unsigned char D_801800A0; - -void func_8015795C(int param_1) -{ - int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ - int iVar1; - unsigned int uVar2; - - *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; - ((int (*)(int, int))func_80147A10)(param_1, 0x400); - if (*(int *)(param_1 + 0x2c) >= 0) { - *(int *)(param_1 + 0x2c) = 0; - } - func_80147A84(param_1); - ((void (*)(int))func_801473EC)(param_1); - func_80148038(param_1, 0x1a000); - func_80147460(param_1); - iVar1 = ((int (*)(int))func_8014ED28)(param_1); - if (iVar1 != 0) { - func_80146D90(param_1); - } - uVar2 = ((int (*)(int))func_80161450)(param_1); - if ((uVar2 & 5) != 0) { - func_80157A8C(param_1); - ((void (*)(int, int))func_80146E90)(param_1, 8); - ((void (*)(int))func_80146CA0)(param_1); - } - if (uVar2 == 0) { - ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); - if (*(unsigned char *)(param_1 + 0x1c0) != 0) { - func_80154A74(param_1, 0x17); - ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); - ((void (*)(int, void *))func_80146DB8)(param_1, &D_801800A0); - ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); - *(short *)(param_1 + 2) = 4; - } - ((void (*)(int))func_801725A4)(param_1); - } - return; -} - - -DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ - -DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ - -DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ - -DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ - -DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80157D20); - -DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ - - -extern void (*D_801800F0[])(void); - -void func_80157DC4(void *a0) { - D_801800F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ - -DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ - -DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ - -DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ - - -extern void (*D_801800F8[])(void); - -void func_80157FC4(void *a0) { - D_801800F8[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots - -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147324(s32 arg0); -extern void func_80146CA0(void *a0); - -extern s32 D_800D51E0; -extern s32 D_801800C4; - -void func_80158038(void * param) -{ - *(u8 *)(param + 0x1aa) = 0xe; - func_80154274((s32 *)param, (s32)&D_800D51E0); - func_80154A74(param, 0x15); - func_80146DB8((s32 *)param, &D_801800C4); - *(s32 *)(param + 0x234) = 0; - func_80146994(5, param, 0xc, 0); - func_80147324(0x455); - func_80146CA0((void *)param); -} - - -DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ - -DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ - - -extern void (*D_80180104[])(void); - -void func_8015824C(void *a0) { - D_80180104[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ - -DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ - -DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) - -extern void func_8014CBF8(void *a0); -extern void func_801474EC(s32 *a0); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801473EC(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern int func_80155FF8(int arg, int a1); - -extern u8 D_801800D4; -extern u8 D_800D533C; - -void func_80158434(s32 param_1) -{ - u32 uVar1; - u32 uVar2; - s32 frame_pad[4]; - (void)&frame_pad; - - *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; - if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { - *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; - ((s32 (*)(void))func_8014CBF8)(); - ((void (*)(s32))func_801474EC)(param_1); - ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); - ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801800D4); - } - if (*(s32 *)(param_1 + 0x234) != 0) { - func_80148038(param_1, 0x10000); - func_80147460(param_1); - func_80147AD4(param_1, 0, 0, 0); - ((void (*)(s32))func_801473EC)(param_1); - } - uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); - if (uVar1 != 0) { - if (uVar1 == 1) goto LAB_80158508; - uVar2 = uVar1 & 0x2000; - } else { - uVar2 = func_80146E98(param_1); - } - if (uVar2 == 0) goto LAB_80158528; -LAB_80158508: - ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); - ((void (*)(s32))func_80146CA0)(param_1); - return; -LAB_80158528: - ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); -} - - -DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ - -DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ - -DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ - -DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80158638); - -DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) -extern s32 D_801A2B00; -extern s32 D_801A2B0C; -extern s32 D_801A2B10; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_8015879C(s32 param_1) { - D_801A2B00 = 0; - D_801A2B0C = 1; - D_801A2B10 = 0; - *(u8 *)(param_1 + 0xa8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(s32))func_80147098)(param_1); - ((void (*)(s32))func_801470AC)(param_1); - ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); - ((void (*)(s32, s32))func_80146C98)(param_1, 1); - ((void (*)(s32))func_80158880)(param_1); -} - - - - -// @class: plumbing -// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) -extern s32 D_801A2B00; -extern s32 D_801A2B0C; -extern s32 D_801A2B10; - -extern void func_80147084(s32 *a0); -extern void func_80147098(s32 *a0); -extern void func_801470AC(s32 *a0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80158880(s32 *param); - -void func_80158814(void *arg0) { - D_801A2B00 = 0; - D_801A2B0C = 1; - D_801A2B10 = 0; - *(s8 *)((s32)arg0 + 0xA8) = 0; - ((void (*)(void))func_80147084)(); - ((void (*)(void *))func_80147098)(arg0); - ((void (*)(void *))func_801470AC)(arg0); - ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); - ((void (*)(void *))func_80158880)(arg0); -} - - - -extern void func_80149020(s32 *a0); -extern void (*D_80180140[])(s32 *); - -void func_80158880(s32 *param) { - func_80149020(param); - D_80180140[*(u8 *)((s32)param + 0x4F)](param); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_801588CC); - -DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ - -DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ - - - -extern void func_80146CA0(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void func_80147324(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern M2C_UNK D_800D58D8; -extern s32 D_801A2B00; - -void func_80158BB0(void *arg0) { - if (D_801A2B00 == 0) { - D_801A2B00 = 1; - } - func_80147324(0x456); - func_80154274(arg0, &D_800D58D8); - func_80154A74(arg0, 0x16); - M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; - M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; - func_801474EC(arg0); - func_801474D8(arg0); - func_801472C8(arg0); - func_80146CA0(arg0); -} - - -DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ - -DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ - -DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ - -DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) - -extern s32 D_801A2B0C; -extern s32 D_80180114[]; - -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158F00(int param_1) { - int *self = (int *)param_1; - struct Actor *act = (struct Actor *)self[0x20 / 4]; - int gate = D_801A2B0C; - - act->timer = (u16)((act->timer + 0x16) & 0xfff); - - if (gate == 0) { - s32 r = rand(); - *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180114[r % 0xb]); - ((void (*)(int))func_80146CA0)(param_1); - } -} - - - -// @class: plumbing -// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 -// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used -// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz -// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); -// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. - -extern s32 D_801A2B10; -extern u8 D_80110C3C[]; - -extern u16 func_80148800(s32 *a0); -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80146C98(s32 *a0, s16 a1); -extern s32 func_8013767C(s32 a0); -extern void func_80146CA0(void *a0); - -void func_80158FA4(s32 param_1) -{ - s32 v0; - s16 sVar1; - - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; - if (((s32 (*)(void))func_80148800)() & 0xf0) { - D_801A2B10 = 1; - } - if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { - func_80139914(*(s32 *)(param_1 + 0x198)); - *(s32 *)(param_1 + 0x198) = 0; - sVar1 = ((s32 (*)(s32))func_80159464)(param_1); - if (sVar1 != 0) { - func_801594E8(param_1, sVar1); - ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); - } else { - *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); - ((void (*)(s32))func_80146CA0)(param_1); - } - } -} - - -DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ - -DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ - -DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ - - -extern void func_80145BF8(void); -extern void func_80146CA0(void *a0); -extern u8 D_800AE6BD; -extern s32 D_801A2B00; -extern s32 D_801A2B08; - -void func_8015934C(void *arg0) { - void *temp_v1; - - if (D_801A2B00 == 4) { - D_801A2B00 = 5; - } - if (D_801A2B08 != 0) { - func_80145BF8(); - func_80146CA0(arg0); - D_800AE6BD += 1; - } - temp_v1 = M2C_FIELD(arg0, void **, 0x20); - M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); -} - - -DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ - -DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ - -DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ - - -extern s16 currentLocationId; -extern s32 func_80029A94(s32); - -extern Entry D_8018017C[]; - -s32 func_80159464(void) { - Entry *e; - - e = D_8018017C; - while (e->id != 0) { - if (currentLocationId == e->id) { - return e->val; - } - e++; - } - if (func_80029A94(1) != 0) { - goto ret0; - } - if (func_80029A94(0) != 0) { - goto ret0; - } - return -1; -ret0: - return 0; -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_801594E8); - - -extern void (*D_80180390[])(void); - -void func_80159698(void *a0) { - D_80180390[*(u8 *)((s32)a0 + 0x15)](); -} - - -DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ - - -// @class: iv-combine -// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; -// p gcc emits the -// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a -// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual -// guarded do-while `if(base+0x2A8= ab + 0x22) { - *q |= orc; - } - q += 0x21; - } while (q < (u32 *)(base + 0x65AC)); - } - - (*(s16 *)&D_801270C0) = 3; - ((void (*)(s32))func_80129248)(0); - func_8013C938(); - func_8013CB20(); - func_8013C98C(); - func_8002850C(0x800, 0x800, 0x800); - func_80028620(0, &(*(u8 *)&D_801801B0)); - func_80028620(1, &(*(u8 *)&D_801801B0) + 0x10); - func_80028620(2, &(*(u8 *)&D_801801B0) + 0x20); - *(s32 *)(param_1 + 0x28) = 0xff; - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - -DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ - -DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ - -DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ - -DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ - - -extern void (*D_80180434[])(void); - -void func_80159968(void *a0) { - D_80180434[*(u8 *)((s32)a0 + 0x4D)](); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_801599A4); - -DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ - -DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80159A20); - -DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ - -DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ - - -extern void (*D_80180588[])(void); - -void func_80159B70(void *a0) { - D_80180588[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ - - -// @class: schedule -// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a -// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm -// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch -// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801553C0(s32 a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80172590(u8 *a0); -extern void func_80146CA0(void *a0); - -extern unsigned char D_801803A4; - -void func_80159BE4(s32 arg0) -{ - int v; - - ((void (*)(int, void *))func_80146DB8)(arg0, &D_801803A4); - if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { - func_80154150(arg0, 5); - func_80154A74(arg0, 0x1C); - } else { - func_80154150(arg0, 4); - func_80154A74(arg0, 0x11); - } - *(int *)(arg0 + 0x234) = 0; - *(int *)(arg0 + 0x238) = 0; - func_801553C0(arg0); - ((void (*)(int))func_801553A8)(arg0); - ((void (*)(int))func_80172590)(arg0); - ((void (*)(int))func_80146CA0)(arg0); -} - - -INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_after", func_80159C84); - -DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ - -DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ - -DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ - - -extern void (*D_80180590[])(void); - -void func_8015A264(void *a0) { - D_80180590[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ - - -// @class: other -// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay - -extern int D_801803B4; - -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_801553A8(s32 *a0); -extern s32 func_80172608(u8 *a0); -extern void func_80146CA0(void *a0); - -void func_8015A2D8(s32 param_1) -{ - unsigned char bVar1; - - ((void (*)(int, int *))func_80146DB8)(param_1, &D_801803B4); - if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { - func_80154150(param_1, 10); - func_80154A74(param_1, 0x1c); - *(int *)(param_1 + 0x2c) = 0xfffc0000; - goto LAB_8015a38c; - } - bVar1 = *(unsigned char *)(param_1 + 0xa9); - switch (bVar1) { - case 0x41: - func_80154150(param_1, 7); - break; - case 0x53: - case 0x73: - func_80154150(param_1, 6); - break; - default: - *(int *)(param_1 + 0x23c) = 0; - goto LAB_8015a390; - } - func_80154A74(param_1, 0x21); -LAB_8015a38c: - *(int *)(param_1 + 0x23c) = 0; -LAB_8015a390: - func_8014C010(param_1, 2); - ((void (*)(int))func_801553A8)(param_1); - ((void (*)(int))func_80172608)(param_1); - ((void (*)(int))func_80146CA0)(param_1); - return; -} - - -/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack - * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), - * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). - * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. - */ -extern u8 D_80078E78[]; -extern s16 currentLocationId; - -extern s32 func_80149D9C(s32 a0); -extern void func_80149FA8(void); -extern s32 func_80149FB0(s32 a0); -extern s32 func_80161B84(void *a0); -extern s32 func_80161B18(void *a0); -extern s32 func_8014A048(s32 a0); -extern void func_8014A218(void); -extern int func_80161BE0(void *param_1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80149AA8(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern s32 func_80149B54(s32 * arg0); -extern void func_80149BAC(s32 *a0); -extern s32 func_801498E0(s32 *a0); -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_800CCCC0(s32 a0); -extern s32 func_80149CD4(s32 a0); -extern void func_8015E880(s32 *a0); -extern s32 func_801496D4(void *a0); -extern void func_80149704(void); -extern s32 func_801488A8(u8 *a0); -extern void func_8014C010(s32 a0, s32 a1); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80159B70(void *a0); -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern void func_8015AC48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern u16 func_801487F4(s32 *a0); -extern s32 func_8016F1C4(void); -extern s32 func_8015AB7C(s32 a0); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_80148824(void *arg0); -extern void func_80147A84(s32 a0); -extern void func_801473EC(s32 *a0); -extern void func_8014D738(void); -extern void func_8015C6E0(s32 *a0); -extern void func_8014E934(s32 _arg0); -extern void func_80155440(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80161278(void *a0); -extern void func_80161C24(s32 a0, s32 a1); -extern s32 func_80172608(u8 *a0); -extern void func_801483E8(void); - -s32 func_8015A3C8(arg0) -s32 arg0; -{ - - extern void (*D_80180440[])(void *); - extern u16 D_800B99DA; - extern s32 D_800D5428; - extern s32 D_801803C4; - s32 min; - s32 grav; - s32 hi; - s32 t; - s32 lo1; - s32 lo2; - s32 sv; - u8 *p; - - p = D_80078E78; - if (currentLocationId == 0x302A) { - min = -0xC0000; - grav = -0x4000; - hi = 0; - } else { - min = -0xB0000; - grav = -0x1000; - hi = 0; - } - - if (func_80149D9C(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149FA8)(arg0); - return; - } - ((void (*)(s32))func_80149FB0)(arg0); - if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { - return; - } - if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { - return; - } - if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { - if (func_8014A048(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8014A218)(arg0); - return; - } - } - if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { - return; - } - switch (((s32 (*)(s32))func_801619A4)(arg0)) { - case 0: - case 1: - case 2: - case 6: - if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149AD4)(arg0); - return; - } - if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149BAC)(arg0); - return; - } - break; - case 3: - ((void (*)(s32))func_801498E0)(arg0); - break; - case 4: - ((void (*)(s32))func_80149954)(arg0); - break; - case 5: - if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - func_800CCCC0(arg0); - return; - } - break; - } - - if (func_80149CD4(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015E880)(arg0); - return; - } - if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_80149704)(arg0); - return; - } - if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { - sv = *(s32 *)(arg0 + 0x2C); - D_80180440[*(u16 *)arg0]((void *)arg0); - func_8014C010(arg0, 1); - ((void (*)(s32, s32))func_80147078)(arg0, 0); - ((void (*)(s32))func_80159B70)(arg0); - if (func_8015ABD4(arg0, sv, min) != 0) { - func_8015AC48(arg0); - } - return; - } - - ((void (*)(s32))func_80148AFC)(arg0); - if (*(u32 *)(arg0 + 0x44) & 0x200) { - if (*(s32 *)(arg0 + 0x23C) == 0) { - func_80154150(arg0, 0xA); - func_80154A74(arg0, 0x1C); - } - ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801803C4); - func_80147AD4(arg0, 0, 0, 0); - } else { - switch (*(u8 *)(arg0 + 0xA9)) { - case 0x41: - func_80147AD4(arg0, 0, 0, grav); - if (*(s32 *)(arg0 + 0x23C) == 0) { - if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - lo1 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo1) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - case 0x53: - case 0x73: - *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; - if (func_8016F1C4() == 0) { - if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { - if (*(s32 *)(arg0 + 0x2C) < -0x80000) { - *(s32 *)(arg0 + 0x2C) = -0x80000; - } - } - if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { - if (*(s32 *)(arg0 + 0x2C) < -0x40000) { - *(s32 *)(arg0 + 0x2C) = -0x40000; - } - } - } - if (*(s32 *)(arg0 + 0x2C) < min) { - *(s32 *)(arg0 + 0x2C) = min; - } - if (*(s32 *)(arg0 + 0x2C) >= hi) { - *(s32 *)(arg0 + 0x2C) = hi; - } - func_80147A84(arg0); - if (*(s32 *)(arg0 + 0x23C) == 0) { - lo2 = -0x94000; - t = *(s32 *)(arg0 + 0x2C); - if (t < lo2) { - func_80154150(arg0, 8); - } else if (t < -0x70000) { - ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); - } else { - func_80154150(arg0, 6); - } - } - break; - } - } - - ((void (*)(s32))func_801473EC)(arg0); - if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { - func_8014C010(arg0, 2); - } - if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { - D_80180440[*(u16 *)arg0]((void *)arg0); - ((void (*)(s32))func_8015C6E0)(arg0); - return; - } - if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { - ((void (*)(s32))func_80155440)(arg0); - func_80154150(arg0, 0x12); - func_80154A74(arg0, 0x17); - *(s32 *)(arg0 + 0x23C) = 1; - } else { - if (*(s32 *)(arg0 + 0x23C) != 0) { - func_801553C0(arg0); - func_80154150(arg0, 6); - func_80154A74(arg0, 0x21); - } - *(s32 *)(arg0 + 0x23C) = 0; - } - if (((s32 (*)(s32))func_80161278)(arg0) == 0) { - if (*(u16 *)(arg0 + 0xB8) & 0x2000) { - func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); - } - ((void (*)(s32))func_80172608)(arg0); - ((void (*)(s32))func_801483E8)(arg0); - } -} - - -DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ - -DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ - - -// @class: plumbing -// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801803D4 arg) -extern void func_80154150(s32 a0, s32 a1); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_801803D4; - -void func_8015AC48(s32 arg0) -{ - func_80154150(arg0, 9); - func_80146DB8((s32 *)arg0, &D_801803D4); - func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); -} - - -DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ - -DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ - -DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ - - -extern void (*D_80180598[])(void); - -void func_8015AD3C(void *a0) { - D_80180598[*(u16 *)((s32)a0 + 0x2)](); -} - - -DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ - -DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8015444C.c b/src/ov_SC07_009/ov_SC07_009_jr_8015444C.c new file mode 100644 index 000000000..2eebc9182 --- /dev/null +++ b/src/ov_SC07_009/ov_SC07_009_jr_8015444C.c @@ -0,0 +1,2186 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801802DC; +extern u8 D_8018024C; +extern u8 D_80180228; +extern u8 D_80180204; +extern u8 D_801802B8; +extern u8 D_80180294; +extern u8 D_80180270; +extern u8 D_801801E0; +extern void func_80145934(void); +extern u8 D_8018036C; +extern u8 D_80180348; +extern u8 D_80180324; +extern u8 D_80180300; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F764[]; +extern unsigned char D_8017F794[]; +extern unsigned char D_8017F7E4[]; +extern unsigned char D_8017F814[]; +extern unsigned char D_8017F844[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F894[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F95C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F9E4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F9EC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2AC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A2AC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FA1C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FAC4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FAE8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FAD8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FB08[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FB18[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FB30[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FB20; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FB44[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FB60[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FB50; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FB74[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FB88[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB9C; +extern void (*D_8017FBC4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FBA4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +/* ==== end §8b carried decl layer ==== */ + +/* func_8015444C — ov_SC01_077 exemplar of a ~134-member per-location family. + * 363-ins jump-table bytecode interpreter over arg0->unkB4 (s32 command words indexed + * by the u8 program counter at 0xBC), self-recursing to chain commands. 27-case switch + * (cases 4/11/12 share the +2 tail) + cross-jump-merged tail epilogues. + * + * Key structural facts (vs the m2c seed): + * - Every case spells its FULL tail inline (unkB8=1; pc adjust; recurse) — gcc jump2 + * cross-jumping re-merges the identical suffixes, reproducing the target's shared + * blocks WITH per-case arg copies. m2c's goto-sharing under-counts by ~22 ins. + * - p = arg0->unk20 held in a variable (lives in $a0): cases 23/24/default store + * p->unk20 (target `sw $v0,0x20($a0)`), NOT arg0->unk20 (m2c misread). + * - entry timer test is a byte read (lbu 0xB8) via *(u8*)&unkB8. + * - TU-ambient decls: canonical sig void(void*,s32*,s32*,s32*); no `struct Actor` + * tag (ambient one exists); callees 549F8/54A74/553C0/55440 come from ambient + * decls (1-arg call to 3-arg-canon func_801549F8 via fn-ptr cast). + * - cases 23/24/default merged tail (.L80154998): direct in-place statements, + * B8=BA store FIRST, then unkBC++/unkBD++/unkDC++. No shared nc/nd/ne temps — + * shared temps span 3 blocks -> global-alloc pseudos -> no local-alloc tie -> + * `addiu aN,vN,1` into separate regs. Block-local chains tie in place + * (`addiu vN,vN,1`) and the B8-first statement order reproduces the scheduler + * tie-break (loads BC,BD,DC,BA / adds x3 / stores B8,BC,BD,DC). + * + * rtu_match: MATCH (363 ins). PIN-FREE (no register-asm pins, no dead-reads). + * + * match_one: MATCH (363 ins), self-contained. The four callee externs below + * (549F8/54A74/553C0/55440) were previously supplied by the TU-ambient decls and are + * now spelled explicitly, verbatim from the canonical set in src/ov_SC03_099/... — + * the file compiles standalone AND still reconciles for the x134 family sweep. + * + * JTBL VERIFIED (§8a): target jtbl_801D8934, bounds `sltiu $v1,0x1B` = 27 entries. + * Our .rodata emits exactly 27 R_MIPS_32 .text relocs; every entry's (vram - 0x8015444C) + * offset equals ours, incl. the 4/11/12 three-way share at +0x454 and default at +0x4E8. + */ + +typedef struct actor4c { + u8 pad00[0x20]; + struct actor4c *unk20; /* 0x20 */ + u8 pad24[0x44 - 0x24]; + u32 unk44; /* 0x44 */ + u8 pad48[0xB4 - 0x48]; + s32 *unkB4; /* 0xB4 command-stream pointer */ + s16 unkB8; /* 0xB8 countdown timer */ + s16 unkBA; /* 0xBA */ + u8 unkBC; /* 0xBC program counter */ + u8 unkBD; /* 0xBD */ + u8 padBE[0xDC - 0xBE]; + u8 unkDC; /* 0xDC */ + u8 padDD[0x1A8 - 0xDD]; + u8 unk1A8; /* 0x1A8 */ +} Actor4C; + +extern void StoreImage(s32, void *); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_80155440(s32 *a0); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_80154B4C(u8 *a0, s32 a1); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern u8 D_80126738; +extern u8 D_80126748; +extern u8 D_80126838; +extern u8 D_80126848; + +void func_8015444C(void *a0v, s32 *arg1x, s32 *arg2x, s32 *arg3x) { + Actor4C *arg0 = a0v; + s32 *arg1 = arg1x; + s32 *arg2 = arg2x; + s32 *arg3 = arg3x; + Actor4C *p = arg0->unk20; + u8 t; + s32 t2; + u32 op; + s32 temp; + s32 nb4; + s32 nbc; + s32 w; + u8 *img; + + if (p != NULL) { + t = *(u8 *)&arg0->unkB8; + if (t != 0) { + if (*arg1 == 0) { + arg0->unkB8 = t; + *arg1 += 1; + } + t2 = (u16)arg0->unkB8 - 1; + arg0->unkB8 = t2; + if (!(t2 & 0xFF)) { + op = arg0->unkB4[arg0->unkBC]; + switch (op) { + case 0: + arg0->unkB8 = 0; + *arg2 |= 0x8000; + arg0->unkBA = 0; + arg0->unkBC = 0; + arg0->unkBD = 0; + break; + case 1: + arg0->unkB8 = 1; + *arg2 |= 0x8000; + arg0->unkBC = 0; + arg0->unkBD = 0; + arg0->unkDC = 0; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 2: + arg0->unkB8 = 0; + arg0->unkBC = arg0->unkBC + 1; + *arg2 |= 0x8000; + break; + case 3: + temp = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + arg0->unkBA = temp; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 5: + nb4 = arg0->unkB4[arg0->unkBC + 1]; + nbc = arg0->unkB4[arg0->unkBC + 2]; + arg0->unkB8 = 1; + arg0->unkDC = 0; + arg0->unkBC = nbc; + arg0->unkB4 = (s32 *)nb4; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 6: + arg0->unkBC = arg0->unkB4[arg0->unkBC + 1]; + arg0->unkB8 = 1; + arg0->unkDC = ((s32 (*)(s32))func_801549F8)((s32)arg0); + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 7: + arg0->unkB8 = 1; + *arg2 |= 0x4000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 8: + arg0->unkB8 = 1; + *arg2 |= 0x2000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 9: + arg0->unkB8 = 1; + *arg2 |= 0x1000; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 10: + arg0->unkB8 = 1; + *arg2 |= 0x800; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 13: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 14: + if (*arg3 == 0) { + func_80154B4C((u8 *)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 15: + if (*arg3 == 0) { + func_80154A74((s32)arg0, arg0->unkB4[arg0->unkBC + 1]); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 16: + if (*arg3 == 0) { + func_801553C0((s32)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 17: + if (*arg3 == 0) { + func_80155440((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 18: + if (*arg3 == 0) { + func_80155394((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 19: + if (*arg3 == 0) { + func_801553A8((s32 *)arg0); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 20: + if (*arg3 == 0) { + arg0->unk1A8 ^= 1; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 21: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126738; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 22: + if (*arg3 == 0) { + w = arg0->unkB4[arg0->unkBC + 1]; + img = &D_80126838; + StoreImage(w, img); + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 4: + case 11: + case 12: + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 2; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 23: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126748; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 24: + if (*arg3 == 0) { + p->unk20 = (Actor4C *)&D_80126848; + } + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + case 25: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 & 0xFFFDFFFF; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + case 26: + if (*arg3 == 0) { + arg0->unk44 = arg0->unk44 | 0x20000; + } + arg0->unkB8 = 1; + arg0->unkBC = arg0->unkBC + 1; + arg0->unkBD = arg0->unkBD + 1; + func_8015444C(arg0, arg1, arg2, arg3); + break; + default: + p->unk20 = (Actor4C *)(op + 0x10); + arg0->unkB8 = (u16)arg0->unkBA; + arg0->unkBC++; + arg0->unkBD++; + arg0->unkDC++; + break; + } + } + arg0->unkB8 = (u16)arg0->unkB8 | *arg2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", 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) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80154C24); + +DEFINE_func_80154ED8() /* dedup: shared engine-core @0x80154ED8 (src/shared) */ + +DEFINE_func_80154F9C() /* dedup: shared engine-core @0x80154F9C (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH (array-of-struct stride-8 base materialize + addu, %lo folded into addiu) + +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_800183E0(s32 a0); + +extern ImgRect8 D_8017FBD0[]; + +void func_801550FC(s32 arg0) +{ + if (arg0 & 0x40000000) { + MoveImage(&D_8017FBD0[arg0 & 0xFF], 0x200, 0x100); + } else { + ((void (*)(void))func_800183E0)(); + } +} + + +DEFINE_func_80155150() /* dedup: shared engine-core @0x80155150 (src/shared) */ + +DEFINE_func_801552F4() /* dedup: shared engine-core @0x801552F4 (src/shared) */ + +DEFINE_func_80155344() /* dedup: shared engine-core @0x80155344 (src/shared) */ + +DEFINE_func_80155394() /* dedup: shared engine-core @0x80155394 (src/shared) */ + +DEFINE_func_801553A8() /* dedup: shared engine-core @0x801553A8 (src/shared) */ + +DEFINE_func_801553C0() /* dedup: shared engine-core @0x801553C0 (src/shared) */ + +DEFINE_func_80155440() /* dedup: shared engine-core @0x80155440 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; decrement persists as separate addiu in delay slot + +extern int (*D_8017FC10[])(void); + +s32 func_80155458(s32 param_1) +{ + int idx; + + idx = *(unsigned char *)(param_1 + 0x4e); + if (idx != 0) { + idx = idx - 1; + if ((*D_8017FC10[idx])() == 0) { + *(unsigned char *)(param_1 + 0x4e) = 0; + } + } + return *(unsigned char *)(param_1 + 0x4e); +} + + +DEFINE_func_801554B8() /* dedup: shared engine-core @0x801554B8 (src/shared) */ + +DEFINE_func_80155518() /* dedup: shared engine-core @0x80155518 (src/shared) */ + +DEFINE_func_8015554C() /* dedup: shared engine-core @0x8015554C (src/shared) */ + + +extern void (*D_8017FC14[])(void); + +void func_80155580(void *a0) { + D_8017FC14[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_801555BC() /* dedup: shared engine-core @0x801555BC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_801555F4); + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80155800); + +DEFINE_func_80155A44() /* dedup: shared engine-core @0x80155A44 (src/shared) */ + +DEFINE_func_80155B20() /* dedup: shared engine-core @0x80155B20 (src/shared) */ + +DEFINE_func_80155B9C() /* dedup: shared engine-core @0x80155B9C (src/shared) */ + +DEFINE_func_80155C0C() /* dedup: shared engine-core @0x80155C0C (src/shared) */ + +DEFINE_func_80155C64() /* dedup: shared engine-core @0x80155C64 (src/shared) */ + +DEFINE_func_80155D70() /* dedup: shared engine-core @0x80155D70 (src/shared) */ + +DEFINE_func_80155E30() /* dedup: shared engine-core @0x80155E30 (src/shared) */ + +DEFINE_func_80155EA4() /* dedup: shared engine-core @0x80155EA4 (src/shared) */ + +DEFINE_func_80155F58() /* dedup: shared engine-core @0x80155F58 (src/shared) */ + +DEFINE_func_80155F60() /* dedup: shared engine-core @0x80155F60 (src/shared) */ + +DEFINE_func_80155F80() /* dedup: shared engine-core @0x80155F80 (src/shared) */ + +DEFINE_func_80155FB0() /* dedup: shared engine-core @0x80155FB0 (src/shared) */ + +DEFINE_func_80155FD4() /* dedup: shared engine-core @0x80155FD4 (src/shared) */ + +DEFINE_func_80155FF8() /* dedup: shared engine-core @0x80155FF8 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80156044); + +DEFINE_func_8015616C() /* dedup: shared engine-core @0x8015616C (src/shared) */ + +DEFINE_func_80156370() /* dedup: shared engine-core @0x80156370 (src/shared) */ + + + +extern S801563EC D_8017FE08[]; + +S801563EC *func_801563EC(u16 idx) { + return &D_8017FE08[idx]; +} + + +DEFINE_func_8015640C() /* dedup: shared engine-core @0x8015640C (src/shared) */ + +DEFINE_func_801564B0() /* dedup: shared engine-core @0x801564B0 (src/shared) */ + +DEFINE_func_801565C0() /* dedup: shared engine-core @0x801565C0 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80156600); + +DEFINE_func_80156648() /* dedup: shared engine-core @0x80156648 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80156670); + +DEFINE_func_801567BC() /* dedup: shared engine-core @0x801567BC (src/shared) */ + +DEFINE_func_80156848() /* dedup: shared engine-core @0x80156848 (src/shared) */ + +DEFINE_func_80156A14() /* dedup: shared engine-core @0x80156A14 (src/shared) */ + + +// @class: struct +// @stuck: none — MATCH expected; D_8011520C indexed by param_2 (byte) folds %lo; D_80180078 indexed halfword folds %lo +extern unsigned char D_8011520C[]; +extern unsigned short D_80180078[]; +extern void func_80147324(s32 arg0); + +void func_80156A1C(s32 param_1, s32 param_2) +{ + if (*(unsigned char *)(param_1 + 0xDA) == 0) { + func_80147324(D_80180078[D_8011520C[param_2]]); + *(unsigned char *)(param_1 + 0xDA) = *(unsigned char *)(param_1 + 0xDA) + 1; + } +} + + +DEFINE_func_80156A88() /* dedup: shared engine-core @0x80156A88 (src/shared) */ + +DEFINE_func_80156B74() /* dedup: shared engine-core @0x80156B74 (src/shared) */ + +DEFINE_func_80156ECC() /* dedup: shared engine-core @0x80156ECC (src/shared) */ + +DEFINE_func_80156FA8() /* dedup: shared engine-core @0x80156FA8 (src/shared) */ + + +void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, + s32 a4, s32 a5, s32 a6, s32 a7, + s32 a8, s32 a9, u16 a10, s32 a11, s32 a12) { + func_801571C4(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); +} + + +DEFINE_func_801571C4() /* dedup: shared engine-core @0x801571C4 (src/shared) */ + +DEFINE_func_801574DC() /* dedup: shared engine-core @0x801574DC (src/shared) */ + +DEFINE_func_80157510() /* dedup: shared engine-core @0x80157510 (src/shared) */ + + +extern void (*D_80180088[])(void); + +void func_80157544(void *a0) { + D_80180088[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157580() /* dedup: shared engine-core @0x80157580 (src/shared) */ + +DEFINE_func_801575E4() /* dedup: shared engine-core @0x801575E4 (src/shared) */ + +DEFINE_func_801576A8() /* dedup: shared engine-core @0x801576A8 (src/shared) */ + +DEFINE_func_8015771C() /* dedup: shared engine-core @0x8015771C (src/shared) */ + +DEFINE_func_8015773C() /* dedup: shared engine-core @0x8015773C (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (scalar global store + two sequential calls, param_1 saved across) + +extern int D_801A2AF8; +extern void func_80147078(s32 *a0, s16 a1); +extern void func_801578C0(s32 a0); + +void func_80157788(int param_1) +{ + D_801A2AF8 = 300; + ((void (*)(int, int))func_80147078)(param_1, 7); + func_801578C0(param_1); +} + + + + + +void func_801577C8(s32 arg0) { + D_801A2AF8 = 0x12C; + func_80147078(arg0, 7); + func_80157808(arg0); +} + + + +// @class: struct +// @stuck: none — MATCH expected (fnptr-table %lo-fold via extern array + global counter decrement + two saved-param calls) + +extern void (*D_801800B0[])(void); +extern int D_801A2AF8; +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); + +void func_80157808(void *param_1) +{ + D_801800B0[*(unsigned short *)((char *)param_1 + 2)](); + D_801A2AF8 = D_801A2AF8 - 1; + if (D_801A2AF8 == -1) { + func_801599A4(param_1); + func_80159B3C(param_1); + } +} + + +DEFINE_func_80157880() /* dedup: shared engine-core @0x80157880 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); STUB: param_1 held in $s0 across calls, u8 store of 9 before func_80154274 + +extern void func_80156648(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80147324(s32 arg0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146CA0(void *a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180090; + +void func_801578C0(s32 param_1) +{ + ((void (*)(void))func_80156648)(); + *(u8 *)(param_1 + 0x1AA) = 9; + func_80154274((s32 *)param_1, (s32)&D_800D5128); + ((void (*)(s32 *, s32))func_80154A74)((s32 *)param_1, 0x15); + func_80147324(0xC20); + ((void (*)(s32 *, s32))func_80146DB8)((s32 *)param_1, (s32)&D_80180090); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(4, (s32 *)param_1, 7, 0); + ((void (*)(s32, s32 *, s32, s32))func_80146994)(5, (s32 *)param_1, 9, 0); + ((void (*)(s32 *))func_80146CA0)((s32 *)param_1); + ((void (*)(s32 *))func_801725A4)((s32 *)param_1); +} + + + + +// @class: other +// @stuck: none — MATCH (76 ins). Body is byte-identical with a plain transcription; the only +// delta was frame size: target frame is 0x30 (saves at 0x20/0x24/0x28), not 0x20. Target reserves +// a 16-byte UNREFERENCED stack local (no sp refs anywhere in the body) — gcc-2.7.2 does NOT +// dead-strip an aggregate local even at -O2, so a dead `int frame_pad[4]` reproduces vars=16 +// (.frame $sp,48: vars=16, regs=3, args=16) with zero body footprint. match_one => MATCH. + +extern void func_80147A10(int a0, int a1); +extern void func_80147A84(int); +extern void func_801473EC(s32 *a0); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_8014ED28(s32 _arg0); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); +extern void func_80154A74(int, int); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern s32 func_801725A4(u8 *a0); + +extern unsigned char D_800D5178; +extern unsigned char D_801800A0; + +void func_8015795C(int param_1) +{ + int frame_pad[4]; /* dead 16-byte local: forces target's 0x30 frame (vars=16); never referenced */ + int iVar1; + unsigned int uVar2; + + *(unsigned int *)(param_1 + 0x44) = *(unsigned int *)(param_1 + 0x44) | 2; + ((int (*)(int, int))func_80147A10)(param_1, 0x400); + if (*(int *)(param_1 + 0x2c) >= 0) { + *(int *)(param_1 + 0x2c) = 0; + } + func_80147A84(param_1); + ((void (*)(int))func_801473EC)(param_1); + func_80148038(param_1, 0x1a000); + func_80147460(param_1); + iVar1 = ((int (*)(int))func_8014ED28)(param_1); + if (iVar1 != 0) { + func_80146D90(param_1); + } + uVar2 = ((int (*)(int))func_80161450)(param_1); + if ((uVar2 & 5) != 0) { + func_80157A8C(param_1); + ((void (*)(int, int))func_80146E90)(param_1, 8); + ((void (*)(int))func_80146CA0)(param_1); + } + if (uVar2 == 0) { + ((void (*)(int, int))func_80155FF8)(param_1, *(unsigned char *)(param_1 + 0x1aa)); + if (*(unsigned char *)(param_1 + 0x1c0) != 0) { + func_80154A74(param_1, 0x17); + ((void (*)(int, void *))func_80154274)(param_1, &D_800D5178); + ((void (*)(int, void *))func_80146DB8)(param_1, &D_801800A0); + ((void (*)(int, int))func_801477E8)(param_1, 0xfff40000); + *(short *)(param_1 + 2) = 4; + } + ((void (*)(int))func_801725A4)(param_1); + } + return; +} + + +DEFINE_func_80157A8C() /* dedup: shared engine-core @0x80157A8C (src/shared) */ + +DEFINE_func_80157AC8() /* dedup: shared engine-core @0x80157AC8 (src/shared) */ + +DEFINE_func_80157B74() /* dedup: shared engine-core @0x80157B74 (src/shared) */ + +DEFINE_func_80157BC8() /* dedup: shared engine-core @0x80157BC8 (src/shared) */ + +DEFINE_func_80157CCC() /* dedup: shared engine-core @0x80157CCC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80157D20); + +DEFINE_func_80157D74() /* dedup: shared engine-core @0x80157D74 (src/shared) */ + + +extern void (*D_801800F0[])(void); + +void func_80157DC4(void *a0) { + D_801800F0[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80157E00() /* dedup: shared engine-core @0x80157E00 (src/shared) */ + +DEFINE_func_80157E38() /* dedup: shared engine-core @0x80157E38 (src/shared) */ + +DEFINE_func_80157EA4() /* dedup: shared engine-core @0x80157EA4 (src/shared) */ + +DEFINE_func_80157F64() /* dedup: shared engine-core @0x80157F64 (src/shared) */ + + +extern void (*D_801800F8[])(void); + +void func_80157FC4(void *a0) { + D_801800F8[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158000() /* dedup: shared engine-core @0x80158000 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (expected); straight-line call sequence with two stores scheduled into jal delay slots + +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147324(s32 arg0); +extern void func_80146CA0(void *a0); + +extern s32 D_800D51E0; +extern s32 D_801800C4; + +void func_80158038(void * param) +{ + *(u8 *)(param + 0x1aa) = 0xe; + func_80154274((s32 *)param, (s32)&D_800D51E0); + func_80154A74(param, 0x15); + func_80146DB8((s32 *)param, &D_801800C4); + *(s32 *)(param + 0x234) = 0; + func_80146994(5, param, 0xc, 0); + func_80147324(0x455); + func_80146CA0((void *)param); +} + + +DEFINE_func_801580B4() /* dedup: shared engine-core @0x801580B4 (src/shared) */ + +DEFINE_func_801581AC() /* dedup: shared engine-core @0x801581AC (src/shared) */ + + +extern void (*D_80180104[])(void); + +void func_8015824C(void *a0) { + D_80180104[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80158288() /* dedup: shared engine-core @0x80158288 (src/shared) */ + +DEFINE_func_801582C0() /* dedup: shared engine-core @0x801582C0 (src/shared) */ + +DEFINE_func_80158344() /* dedup: shared engine-core @0x80158344 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (branch-polarity invert on both dispatch ifs + goto block-order to put the v1!=0/L508 paths as fallthrough; phantom 0x10 frame via address-taken frame_pad[4] + (void)& — zero code) + +extern void func_8014CBF8(void *a0); +extern void func_801474EC(s32 *a0); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801473EC(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern int func_80155FF8(int arg, int a1); + +extern u8 D_801800D4; +extern u8 D_800D533C; + +void func_80158434(s32 param_1) +{ + u32 uVar1; + u32 uVar2; + s32 frame_pad[4]; + (void)&frame_pad; + + *(u32 *)(param_1 + 0x44) = *(u32 *)(param_1 + 0x44) | 2; + if ((*(u16 *)(param_1 + 0xB8) & 0x4000) != 0) { + *(s32 *)(param_1 + 0x234) = *(s32 *)(param_1 + 0x234) + 1; + ((s32 (*)(void))func_8014CBF8)(); + ((void (*)(s32))func_801474EC)(param_1); + ((void (*)(s32, s32))func_801477E8)(param_1, 0xFFFA0000); + ((void (*)(s32, s32))func_80146DB8)(param_1, (s32)&D_801800D4); + } + if (*(s32 *)(param_1 + 0x234) != 0) { + func_80148038(param_1, 0x10000); + func_80147460(param_1); + func_80147AD4(param_1, 0, 0, 0); + ((void (*)(s32))func_801473EC)(param_1); + } + uVar1 = ((s32 (*)(s32, s32))func_801615C4)(param_1, 0); + if (uVar1 != 0) { + if (uVar1 == 1) goto LAB_80158508; + uVar2 = uVar1 & 0x2000; + } else { + uVar2 = func_80146E98(param_1); + } + if (uVar2 == 0) goto LAB_80158528; +LAB_80158508: + ((void (*)(s32, s32))func_80154274)(param_1, (s32)&D_800D533C); + ((void (*)(s32))func_80146CA0)(param_1); + return; +LAB_80158528: + ((void (*)(s32, s32))func_80155FF8)(param_1, *(u8 *)(param_1 + 0x1AA)); +} + + +DEFINE_func_80158548() /* dedup: shared engine-core @0x80158548 (src/shared) */ + +DEFINE_func_801585A4() /* dedup: shared engine-core @0x801585A4 (src/shared) */ + +DEFINE_func_801585AC() /* dedup: shared engine-core @0x801585AC (src/shared) */ + +DEFINE_func_801585EC() /* dedup: shared engine-core @0x801585EC (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80158638); + +DEFINE_func_80158794() /* dedup: shared engine-core @0x80158794 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH expected (3 scalar global stores + byte store + 6 calls, source order) +extern s32 D_801A2B00; +extern s32 D_801A2B0C; +extern s32 D_801A2B10; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_8015879C(s32 param_1) { + D_801A2B00 = 0; + D_801A2B0C = 1; + D_801A2B10 = 0; + *(u8 *)(param_1 + 0xa8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(s32))func_80147098)(param_1); + ((void (*)(s32))func_801470AC)(param_1); + ((void (*)(s32, s32))func_80147078)(param_1, 0x1a); + ((void (*)(s32, s32))func_80146C98)(param_1, 1); + ((void (*)(s32))func_80158880)(param_1); +} + + + + +// @class: plumbing +// @stuck: none — MATCH (STUB: 3 global stores + byte store + 5 calls in source order) +extern s32 D_801A2B00; +extern s32 D_801A2B0C; +extern s32 D_801A2B10; + +extern void func_80147084(s32 *a0); +extern void func_80147098(s32 *a0); +extern void func_801470AC(s32 *a0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80158880(s32 *param); + +void func_80158814(void *arg0) { + D_801A2B00 = 0; + D_801A2B0C = 1; + D_801A2B10 = 0; + *(s8 *)((s32)arg0 + 0xA8) = 0; + ((void (*)(void))func_80147084)(); + ((void (*)(void *))func_80147098)(arg0); + ((void (*)(void *))func_801470AC)(arg0); + ((void (*)(void *, s32))func_80147078)(arg0, 0x1A); + ((void (*)(void *))func_80158880)(arg0); +} + + + +extern void func_80149020(s32 *a0); +extern void (*D_80180140[])(s32 *); + +void func_80158880(s32 *param) { + func_80149020(param); + D_80180140[*(u8 *)((s32)param + 0x4F)](param); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_801588CC); + +DEFINE_func_80158AB4() /* dedup: shared engine-core @0x80158AB4 (src/shared) */ + +DEFINE_func_80158AE4() /* dedup: shared engine-core @0x80158AE4 (src/shared) */ + + + +extern void func_80146CA0(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void func_80147324(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern M2C_UNK D_800D58D8; +extern s32 D_801A2B00; + +void func_80158BB0(void *arg0) { + if (D_801A2B00 == 0) { + D_801A2B00 = 1; + } + func_80147324(0x456); + func_80154274(arg0, &D_800D58D8); + func_80154A74(arg0, 0x16); + M2C_FIELD(arg0, s32 *, 0x234) = 0xE30000; + M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s16 *, 0x10) = 0; + func_801474EC(arg0); + func_801474D8(arg0); + func_801472C8(arg0); + func_80146CA0(arg0); +} + + +DEFINE_func_80158C40() /* dedup: shared engine-core @0x80158C40 (src/shared) */ + +DEFINE_func_80158CD8() /* dedup: shared engine-core @0x80158CD8 (src/shared) */ + +DEFINE_func_80158D60() /* dedup: shared engine-core @0x80158D60 (src/shared) */ + +DEFINE_func_80158E24() /* dedup: shared engine-core @0x80158E24 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (signed %11 magic + word-array %lo fold; ((void (*)(int))func_80146CA0)(param_1) reuses $a0 for the 0x198 store in its jal delay slot) + +extern s32 D_801A2B0C; +extern s32 D_80180114[]; + +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158F00(int param_1) { + int *self = (int *)param_1; + struct Actor *act = (struct Actor *)self[0x20 / 4]; + int gate = D_801A2B0C; + + act->timer = (u16)((act->timer + 0x16) & 0xfff); + + if (gate == 0) { + s32 r = rand(); + *(s32 *)(param_1 + 0x198) = func_8013767C(D_80180114[r % 0xb]); + ((void (*)(int))func_80146CA0)(param_1); + } +} + + + +// @class: plumbing +// @stuck: none — MATCH (51 ins). Key: func_801594E8 takes a 2nd arg = sVar1 (the (short)func_80159464 +// return). $a1 is set by sra BEFORE the beqz and stays live into the jal, so the value is used +// twice (branch test + arg2) — that 2nd use is what keeps the sll;sra (gcc folds sll;sra;beqz +// -> sll;beqz otherwise). Also: branch-polarity invert (!=0 -> 594E8 fall-through, else 767C); +// func_8013767C arg is &(*(u8 *)&D_80110C3C) (lui%hi+addiu%lo, not a literal). Ghidra missed the 2nd arg. + +extern s32 D_801A2B10; +extern u8 D_80110C3C[]; + +extern u16 func_80148800(s32 *a0); +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80146C98(s32 *a0, s16 a1); +extern s32 func_8013767C(s32 a0); +extern void func_80146CA0(void *a0); + +void func_80158FA4(s32 param_1) +{ + s32 v0; + s16 sVar1; + + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v0 + 0x12) = (*(u16 *)(v0 + 0x12) + 0x16) & 0xfff; + if (((s32 (*)(void))func_80148800)() & 0xf0) { + D_801A2B10 = 1; + } + if (func_801399F0(*(s32 *)(param_1 + 0x198)) != 0) { + func_80139914(*(s32 *)(param_1 + 0x198)); + *(s32 *)(param_1 + 0x198) = 0; + sVar1 = ((s32 (*)(s32))func_80159464)(param_1); + if (sVar1 != 0) { + func_801594E8(param_1, sVar1); + ((void (*)(s32, s32))func_80146C98)(param_1, 0xc); + } else { + *(s32 *)(param_1 + 0x198) = ((s32 (*)(u8 *))func_8013767C)(&(*(u8 *)&D_80110C3C)); + ((void (*)(s32))func_80146CA0)(param_1); + } + } +} + + +DEFINE_func_80159070() /* dedup: shared engine-core @0x80159070 (src/shared) */ + +DEFINE_func_80159120() /* dedup: shared engine-core @0x80159120 (src/shared) */ + +DEFINE_func_801592CC() /* dedup: shared engine-core @0x801592CC (src/shared) */ + + +extern void func_80145BF8(void); +extern void func_80146CA0(void *a0); +extern u8 D_800AE6BD; +extern s32 D_801A2B00; +extern s32 D_801A2B08; + +void func_8015934C(void *arg0) { + void *temp_v1; + + if (D_801A2B00 == 4) { + D_801A2B00 = 5; + } + if (D_801A2B08 != 0) { + func_80145BF8(); + func_80146CA0(arg0); + D_800AE6BD += 1; + } + temp_v1 = M2C_FIELD(arg0, void **, 0x20); + M2C_FIELD(temp_v1, u16 *, 0x12) = (u16) ((M2C_FIELD(temp_v1, u16 *, 0x12) + 0x16) & 0xFFF); +} + + +DEFINE_func_801593E4() /* dedup: shared engine-core @0x801593E4 (src/shared) */ + +DEFINE_func_80159404() /* dedup: shared engine-core @0x80159404 (src/shared) */ + +DEFINE_func_80159434() /* dedup: shared engine-core @0x80159434 (src/shared) */ + + +extern s16 currentLocationId; +extern s32 func_80029A94(s32); + +extern Entry D_8018017C[]; + +s32 func_80159464(void) { + Entry *e; + + e = D_8018017C; + while (e->id != 0) { + if (currentLocationId == e->id) { + return e->val; + } + e++; + } + if (func_80029A94(1) != 0) { + goto ret0; + } + if (func_80029A94(0) != 0) { + goto ret0; + } + return -1; +ret0: + return 0; +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_801594E8); + + +extern void (*D_80180390[])(void); + +void func_80159698(void *a0) { + D_80180390[*(u8 *)((s32)a0 + 0x15)](); +} + + +DEFINE_func_801596D4() /* dedup: shared engine-core @0x801596D4 (src/shared) */ + + +// @class: iv-combine +// @stuck: none — MATCH (97 ins). Recipe: $s0=base=&(*(u8 *)&D_800AF630) hoisted at top; loop1 = for(p=base+0x65A8; +// p gcc emits the +// -4 loop-inversion guard + reuses END for END+4). BOTHER: loop2 needs ab=&D_800AFAE8 POST-guard as a +// shared base for A=ab+1,B=ab+0x22 -> a for-loop hoists it PRE-guard (fold or perm); the fix is a manual +// guarded do-while `if(base+0x2A8= ab + 0x22) { + *q |= orc; + } + q += 0x21; + } while (q < (u32 *)(base + 0x65AC)); + } + + (*(s16 *)&D_801270C0) = 3; + ((void (*)(s32))func_80129248)(0); + func_8013C938(); + func_8013CB20(); + func_8013C98C(); + func_8002850C(0x800, 0x800, 0x800); + func_80028620(0, &(*(u8 *)&D_801801B0)); + func_80028620(1, &(*(u8 *)&D_801801B0) + 0x10); + func_80028620(2, &(*(u8 *)&D_801801B0) + 0x20); + *(s32 *)(param_1 + 0x28) = 0xff; + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + } + return 0; +} + + +DEFINE_func_80159874() /* dedup: shared engine-core @0x80159874 (src/shared) */ + +DEFINE_func_8015987C() /* dedup: shared engine-core @0x8015987C (src/shared) */ + +DEFINE_func_801598BC() /* dedup: shared engine-core @0x801598BC (src/shared) */ + +DEFINE_func_801598E0() /* dedup: shared engine-core @0x801598E0 (src/shared) */ + + +extern void (*D_80180434[])(void); + +void func_80159968(void *a0) { + D_80180434[*(u8 *)((s32)a0 + 0x4D)](); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_801599A4); + +DEFINE_func_801599E0() /* dedup: shared engine-core @0x801599E0 (src/shared) */ + +DEFINE_func_80159A18() /* dedup: shared engine-core @0x80159A18 (src/shared) */ + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80159A20); + +DEFINE_func_80159B08() /* dedup: shared engine-core @0x80159B08 (src/shared) */ + +DEFINE_func_80159B3C() /* dedup: shared engine-core @0x80159B3C (src/shared) */ + + +extern void (*D_80180588[])(void); + +void func_80159B70(void *a0) { + D_80180588[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_80159BAC() /* dedup: shared engine-core @0x80159BAC (src/shared) */ + + +// @class: schedule +// @stuck: none — MATCH (40 ins). Duplicate func_80154A74(arg0,K) into BOTH branch arms (not a +// single shared-join call): forces gcc to cross-jump the jal while keeping per-arm +// `addu $a0,$s0` setup + a `nop` join delay slot, matching the 40-ins layout. Branch +// polarity: write `if (flag & 0x200 != 0){5,0x1C} else {4,0x11}` to get the `beqz`. + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801553C0(s32 a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80172590(u8 *a0); +extern void func_80146CA0(void *a0); + +extern unsigned char D_801803A4; + +void func_80159BE4(s32 arg0) +{ + int v; + + ((void (*)(int, void *))func_80146DB8)(arg0, &D_801803A4); + if ((*(unsigned int *)(arg0 + 0x44) & 0x200) != 0) { + func_80154150(arg0, 5); + func_80154A74(arg0, 0x1C); + } else { + func_80154150(arg0, 4); + func_80154A74(arg0, 0x11); + } + *(int *)(arg0 + 0x234) = 0; + *(int *)(arg0 + 0x238) = 0; + func_801553C0(arg0); + ((void (*)(int))func_801553A8)(arg0); + ((void (*)(int))func_80172590)(arg0); + ((void (*)(int))func_80146CA0)(arg0); +} + + +INCLUDE_ASM("asm/ov_SC07_009/nonmatchings/ov_SC07_009_jr_8015444C", func_80159C84); + +DEFINE_func_8015A1C8() /* dedup: shared engine-core @0x8015A1C8 (src/shared) */ + +DEFINE_func_8015A1FC() /* dedup: shared engine-core @0x8015A1FC (src/shared) */ + +DEFINE_func_8015A230() /* dedup: shared engine-core @0x8015A230 (src/shared) */ + + +extern void (*D_80180590[])(void); + +void func_8015A264(void *a0) { + D_80180590[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015A2A0() /* dedup: shared engine-core @0x8015A2A0 (src/shared) */ + + +// @class: other +// @stuck: none — MATCH (60 ins). switch() gives signed slti pivot; per-case duplicated call gives per-case a0 setup + nop jal delay + +extern int D_801803B4; + +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_801553A8(s32 *a0); +extern s32 func_80172608(u8 *a0); +extern void func_80146CA0(void *a0); + +void func_8015A2D8(s32 param_1) +{ + unsigned char bVar1; + + ((void (*)(int, int *))func_80146DB8)(param_1, &D_801803B4); + if ((*(unsigned int *)(param_1 + 0x44) & 0x200) != 0) { + func_80154150(param_1, 10); + func_80154A74(param_1, 0x1c); + *(int *)(param_1 + 0x2c) = 0xfffc0000; + goto LAB_8015a38c; + } + bVar1 = *(unsigned char *)(param_1 + 0xa9); + switch (bVar1) { + case 0x41: + func_80154150(param_1, 7); + break; + case 0x53: + case 0x73: + func_80154150(param_1, 6); + break; + default: + *(int *)(param_1 + 0x23c) = 0; + goto LAB_8015a390; + } + func_80154A74(param_1, 0x21); +LAB_8015a38c: + *(int *)(param_1 + 0x23c) = 0; +LAB_8015a390: + func_8014C010(param_1, 2); + ((void (*)(int))func_801553A8)(param_1); + ((void (*)(int))func_80172608)(param_1); + ((void (*)(int))func_80146CA0)(param_1); + return; +} diff --git a/src/ov_SC07_009/ov_SC07_009_jr_8015A3C8.c b/src/ov_SC07_009/ov_SC07_009_jr_8015A3C8.c new file mode 100644 index 000000000..2685f29ea --- /dev/null +++ b/src/ov_SC07_009/ov_SC07_009_jr_8015A3C8.c @@ -0,0 +1,1478 @@ +#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. */ +struct Ent_801506A4 { + unsigned short unk0; /* 0x0 */ + char pad[0x5A]; + unsigned short unk5C; /* 0x5C */ + char pad2[0x12]; + short unk70; /* 0x70 */ +}; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_801802DC; +extern u8 D_8018024C; +extern u8 D_80180228; +extern u8 D_80180204; +extern u8 D_801802B8; +extern u8 D_80180294; +extern u8 D_80180270; +extern u8 D_801801E0; +extern void func_80145934(void); +extern u8 D_8018036C; +extern u8 D_80180348; +extern u8 D_80180324; +extern u8 D_80180300; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 D_80126B58; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8017F764[]; +extern unsigned char D_8017F794[]; +extern unsigned char D_8017F7E4[]; +extern unsigned char D_8017F814[]; +extern unsigned char D_8017F844[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(void); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8017F894[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(s32); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_8012E5CC(s32 a0, s32 a1, s32 a2); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8017F95C[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32, s32, s32, s32); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8017F9E4[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8017F9EC; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(s32 a0, void *a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern void func_8014D2A0(s32 a0, void *a1, void *a2); +extern void func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern void func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801A2AC0; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(void); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801A2AC4; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8017FA1C; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern void func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8017FAC4[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8017FAE8[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8017FAD8; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8017FAFC[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8017FB08[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8017FB18[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8017FB30[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8017FB20; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8017FB44[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8017FB60[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8017FB50; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8017FB74[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8017FB88[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8017FB9C; +extern void (*D_8017FBC4[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8017FBA4; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8017FC10[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8017FC14[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_80180078[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_80180088[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern void func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801A2AF8; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_801800B0[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_80180090; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_801800A0; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_801800F0[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_801800F8[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_801800C4; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_80180104[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_801800D4; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801A2B00; +extern s32 D_801A2B0C; +extern s32 D_801A2B10; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_80180140[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_80180114[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801A2B08; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_80180390[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_801801B0[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_80180434[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_80180588[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_801803A4; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_80180590[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_801803B4; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8015A3C8 (ov_SC01_077_after, 493 ins, jtbl_801D8B34) — Phase 26 crack + * Entity air/fall update: 7-case switch (0/1/2/6 shared, 3/4/5 own, no default block), + * then a big velocity-clamp tail with a nested char switch (0x41 / 0x53+0x73). + * PIN-FREE. Offset-pure (s32 arg0 + raw offsets) — x134 template-safe. + */ +extern u8 D_80078E78[]; +extern s16 currentLocationId; + +extern s32 func_80149D9C(s32 a0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern s32 func_80161B84(void *a0); +extern s32 func_80161B18(void *a0); +extern s32 func_8014A048(s32 a0); +extern void func_8014A218(void); +extern int func_80161BE0(void *param_1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80149AA8(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern s32 func_80149B54(s32 * arg0); +extern void func_80149BAC(s32 *a0); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_800CCCC0(s32 a0); +extern s32 func_80149CD4(s32 a0); +extern void func_8015E880(s32 *a0); +extern s32 func_801496D4(void *a0); +extern void func_80149704(void); +extern s32 func_801488A8(u8 *a0); +extern void func_8014C010(s32 a0, s32 a1); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80159B70(void *a0); +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern void func_8015AC48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern u16 func_801487F4(s32 *a0); +extern s32 func_8016F1C4(void); +extern s32 func_8015AB7C(s32 a0); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_80148824(void *arg0); +extern void func_80147A84(s32 a0); +extern void func_801473EC(s32 *a0); +extern void func_8014D738(void); +extern void func_8015C6E0(s32 *a0); +extern void func_8014E934(s32 _arg0); +extern void func_80155440(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80161278(void *a0); +extern void func_80161C24(s32 a0, s32 a1); +extern s32 func_80172608(u8 *a0); +extern void func_801483E8(void); + +s32 func_8015A3C8(arg0) +s32 arg0; +{ + + extern void (*D_80180440[])(void *); + extern u16 D_800B99DA; + extern s32 D_800D5428; + extern s32 D_801803C4; + s32 min; + s32 grav; + s32 hi; + s32 t; + s32 lo1; + s32 lo2; + s32 sv; + u8 *p; + + p = D_80078E78; + if (currentLocationId == 0x302A) { + min = -0xC0000; + grav = -0x4000; + hi = 0; + } else { + min = -0xB0000; + grav = -0x1000; + hi = 0; + } + + if (func_80149D9C(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149FA8)(arg0); + return; + } + ((void (*)(s32))func_80149FB0)(arg0); + if (((s32 (*)(s32))func_80161B84)(arg0) != 0) { + return; + } + if (((s32 (*)(s32))func_80161B18)(arg0) != 0) { + return; + } + if (*(s32 *)(arg0 + 0xB4) == (s32)&D_800D5428) { + if (func_8014A048(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8014A218)(arg0); + return; + } + } + if (((s32 (*)(s32))func_80161BE0)(arg0) != 0) { + return; + } + switch (((s32 (*)(s32))func_801619A4)(arg0)) { + case 0: + case 1: + case 2: + case 6: + if (((s32 (*)(s32))func_80149AA8)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149AD4)(arg0); + return; + } + if (((s32 (*)(s32))func_80149B54)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149BAC)(arg0); + return; + } + break; + case 3: + ((void (*)(s32))func_801498E0)(arg0); + break; + case 4: + ((void (*)(s32))func_80149954)(arg0); + break; + case 5: + if (((s32 (*)(s32))func_80149A64)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + func_800CCCC0(arg0); + return; + } + break; + } + + if (func_80149CD4(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015E880)(arg0); + return; + } + if (((s32 (*)(s32))func_801496D4)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_80149704)(arg0); + return; + } + if (((s32 (*)(s32))func_801488A8)(arg0) == 0) { + sv = *(s32 *)(arg0 + 0x2C); + D_80180440[*(u16 *)arg0]((void *)arg0); + func_8014C010(arg0, 1); + ((void (*)(s32, s32))func_80147078)(arg0, 0); + ((void (*)(s32))func_80159B70)(arg0); + if (func_8015ABD4(arg0, sv, min) != 0) { + func_8015AC48(arg0); + } + return; + } + + ((void (*)(s32))func_80148AFC)(arg0); + if (*(u32 *)(arg0 + 0x44) & 0x200) { + if (*(s32 *)(arg0 + 0x23C) == 0) { + func_80154150(arg0, 0xA); + func_80154A74(arg0, 0x1C); + } + ((void (*)(s32, s32))func_80146DB8)(arg0, (s32)&D_801803C4); + func_80147AD4(arg0, 0, 0, 0); + } else { + switch (*(u8 *)(arg0 + 0xA9)) { + case 0x41: + func_80147AD4(arg0, 0, 0, grav); + if (*(s32 *)(arg0 + 0x23C) == 0) { + if (((s32 (*)(s32))func_801487F4)(arg0) & 4) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } else if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + lo1 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo1) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + case 0x53: + case 0x73: + *(s32 *)(arg0 + 0x2C) = (min * (((s32 (*)(s32))func_80148824)(arg0) & 0xFF)) / 127; + if (func_8016F1C4() == 0) { + if ((*(s16 *)(p + 0x26) < 0x40) || (*(s16 *)(p + 0x2E) < 0x30)) { + if (*(s32 *)(arg0 + 0x2C) < -0x80000) { + *(s32 *)(arg0 + 0x2C) = -0x80000; + } + } + if ((*(s16 *)(p + 0x26) < 0x20) || (*(s16 *)(p + 0x2E) < 0x20)) { + if (*(s32 *)(arg0 + 0x2C) < -0x40000) { + *(s32 *)(arg0 + 0x2C) = -0x40000; + } + } + } + if (*(s32 *)(arg0 + 0x2C) < min) { + *(s32 *)(arg0 + 0x2C) = min; + } + if (*(s32 *)(arg0 + 0x2C) >= hi) { + *(s32 *)(arg0 + 0x2C) = hi; + } + func_80147A84(arg0); + if (*(s32 *)(arg0 + 0x23C) == 0) { + lo2 = -0x94000; + t = *(s32 *)(arg0 + 0x2C); + if (t < lo2) { + func_80154150(arg0, 8); + } else if (t < -0x70000) { + ((void (*)(s32, s32, s32))func_801541D8)(arg0, 7, func_8015AB7C(arg0) & 0xFFFF); + } else { + func_80154150(arg0, 6); + } + } + break; + } + } + + ((void (*)(s32))func_801473EC)(arg0); + if ((min >= *(s32 *)(arg0 + 0x2C)) && !(D_800B99DA & 7)) { + func_8014C010(arg0, 2); + } + if (((s32 (*)(s32))func_8014D738)(arg0) != 0) { + D_80180440[*(u16 *)arg0]((void *)arg0); + ((void (*)(s32))func_8015C6E0)(arg0); + return; + } + if (((s32 (*)(s32))func_8014E934)(arg0) != 0) { + ((void (*)(s32))func_80155440)(arg0); + func_80154150(arg0, 0x12); + func_80154A74(arg0, 0x17); + *(s32 *)(arg0 + 0x23C) = 1; + } else { + if (*(s32 *)(arg0 + 0x23C) != 0) { + func_801553C0(arg0); + func_80154150(arg0, 6); + func_80154A74(arg0, 0x21); + } + *(s32 *)(arg0 + 0x23C) = 0; + } + if (((s32 (*)(s32))func_80161278)(arg0) == 0) { + if (*(u16 *)(arg0 + 0xB8) & 0x2000) { + func_80161C24(arg0, *(u16 *)(arg0 + 0x16E)); + } + ((void (*)(s32))func_80172608)(arg0); + ((void (*)(s32))func_801483E8)(arg0); + } +} + + +DEFINE_func_8015AB7C() /* dedup: shared engine-core @0x8015AB7C (src/shared) */ + +DEFINE_func_8015ABD4() /* dedup: shared engine-core @0x8015ABD4 (src/shared) */ + + +// @class: plumbing +// @stuck: none — MATCH (param held in $s0 across 3 calls; lhu 0x16E; &D_801803D4 arg) +extern void func_80154150(s32 a0, s32 a1); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801803D4; + +void func_8015AC48(s32 arg0) +{ + func_80154150(arg0, 9); + func_80146DB8((s32 *)arg0, &D_801803D4); + func_80161CD0(arg0, M2C_FIELD(arg0, u16 *, 0x16E)); +} + + +DEFINE_func_8015AC90() /* dedup: shared engine-core @0x8015AC90 (src/shared) */ + +DEFINE_func_8015ACC4() /* dedup: shared engine-core @0x8015ACC4 (src/shared) */ + +DEFINE_func_8015AD08() /* dedup: shared engine-core @0x8015AD08 (src/shared) */ + + +extern void (*D_80180598[])(void); + +void func_8015AD3C(void *a0) { + D_80180598[*(u16 *)((s32)a0 + 0x2)](); +} + + +DEFINE_func_8015AD78() /* dedup: shared engine-core @0x8015AD78 (src/shared) */ + +DEFINE_func_8015ADB0() /* dedup: shared engine-core @0x8015ADB0 (src/shared) */ +